창고 출입 분석

2713 단어
데이터 구조의 작업 으로 인해 스 택 에 들 어 가 는 것 에 대해 진지 하 게 이 해 했 지만 사실은 잘 파악 되 었 다.다음 코드 는 vs 08 에서 디 버 깅 을 통 과 했 습 니 다. 그 안에 스 택 에 들 어 가 는 작업 에 대한 상세 한 과정 이 있 습 니 다. 저 는 스 택 데이터 형식 을 문자 형 으로 예 로 들 었 습 니 다. 인터넷 에서 문자 형 을 찾 지 못 한 것 같 기 때 문 입 니 다.저 는 그냥 정형 데이터 형식의 스 택 을 간단하게 수 정 했 을 뿐 입 니 다.
#include  <stdlib.h>   
#include "stdio.h"   
#include<string.h>  
typedef char SElemType;       //          
#define STACK_INIT_SIZE 10  //             
#define STACKINCREMENT 10    //            
typedef struct  
{  
	SElemType *base;         //         ,base   NULL  
	SElemType *top;             //      
	int stacksize;           //         ( sizeof(SElemType)   )  
}Stack;  

char InitStack(Stack &S)  
{  
	S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); //  malloc        
	if (!S.base)  
		return 0;               //      ,   0  
	S.top=S.base;                //            
	S.stacksize=STACK_INIT_SIZE; //         
	return 1;  
}  

char StackEmpty(Stack S)  
{  
	if (S.base)  
	{  
		if (S.base==S.top)       //      ,   1(true),    0(false)  
		{  
			return 1;  
		}  
	}  
	return 0;  
}  

char Push(Stack &S,SElemType e)  
{  
	if (S.base)  
	{  
		if ((S.top-S.base)>=S.stacksize)    //  ,        
		{  
			S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)* sizeof(SElemType));  
			if(S.base==NULL)  
				return 0;                  //          ,   0(false),         
			S.top=S.base+S.stacksize;               //          
			S.stacksize+=STACKINCREMENT;    //              
		}  
		*S.top++=e; 
		return 1;  
	}  
	return 0;  
}  
//*S.top++=e     
//     ++,    S.top     ,    S      E,           1  
//*++S.top=e  
//     ++,    S.top      1,    S        E。  
char Pop(Stack &S,SElemType &e)  
{  
	if (S.base)  
	{  
		if (S.top>S.base)    //        
		{  
			e=*--S.top;  
			return 1;  
		}  
	}  
	return 0;  
}  

char StackTraverse(Stack &S)//                 
{  
	int i;  
	if (S.base)  
	{  
		printf("

"); for(i=0;i<S.top-S.base;i++) { printf("%c ",S.base[i]); // } printf("
"); return 1; } return 0; } void main() { Stack S; char x,y; InitStack(S); x='c';y='k'; Push(S,x);StackTraverse(S); Push(S,'a');StackTraverse(S); Push(S,y);StackTraverse(S); Pop(S,x);StackTraverse(S); Push(S,'t');StackTraverse(S); Push(S,x);StackTraverse(S); Pop(S,x);StackTraverse(S); Push(S,'s');StackTraverse(S); while(!StackEmpty(S)){ Pop(S,y);StackTraverse(S); printf("%c",y); } printf("%c
",x); }

좋은 웹페이지 즐겨찾기