순차 스 택 의 입 출력

2158 단어 데이터 구조
#include 
#include 
#include 
typedef int Status; 
typedef int SElemType; 
#define STACK_INIT_SIZE 100 
#define STACKINCREMENT 20
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef struct SqStack
 {
   SElemType *base; 
   SElemType *top; 
   int stacksize; 
 } SqStack; //    
 

  Status InitStack(SqStack &S)
 { //       S
   if(!(S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType))))
     exit(OVERFLOW); //       
   S.top=S.base;
   S.stacksize=STACK_INIT_SIZE;
   return OK;
 }

 Status DestroyStack(SqStack &S)
 { //    S
   free(S.base);
   S.base=NULL;
   S.top=NULL;
   S.stacksize=0;
   return OK;
 }

 Status ClearStack(SqStack &S)
 { //  S    
   S.top=S.base;
   return OK;
 }

 int StackLength(SqStack S)
 { //   S     ,     
   return S.top-S.base;
 }

 int GetTop(SqStack S)
 { //     ,  e  S     
   if(S.top>S.base)
     return *(S.top-1);
 }

 Status Push(SqStack &S,SElemType e)
 { //     e       

   if(S.top-S.base>=S.stacksize) //   ,      
   {

     S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
     if(!S.base)
       exit(OVERFLOW); //       
     S.top=S.base+S.stacksize;
     S.stacksize+=STACKINCREMENT;
   }
  		*S.top=e;
		S.top++;
   return OK;
 }

 Status Pop(SqStack &S,SElemType &e)
 { //     ,   S     , e    ,   OK;    ERROR
	 
   if(S.top==S.base)
     return ERROR;
	//e=*--S.top;//e=*S.top;
   	S.top--;
   e=*S.top;
	//S.top--;
	return e;
 }

 Status StackTraverse(SqStack S,Status(*visit)(SElemType))
 { //                    visit()。
   //   visit()  ,     
   while(S.top>S.base)
     visit(*S.base++);
   printf("
"); return OK; } int main() { int e,i,j,a; SqStack S; InitStack(S); printf(" :
"); scanf("%d",&e); printf(" :
"); while(e--)// for ; { scanf("%d",&i); Push(S,i); } while(S.top!=S.base) { //j=GetTop(S);// //printf("%d
",j); j=Pop(S,a); printf("%d",j);// }// ; return 0; }

좋은 웹페이지 즐겨찾기