#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 20
#define STACK_INCERT 10
typedef char ElemType;
typedef int Status;
typedef struct{
ElemType *base;
ElemType *top;
int stacksize;
} SqStack;
Status InitStack (SqStack &S);
Status StackTraverse (SqStack S);
Status Push (SqStack &S,ElemType e);
Status Pop (SqStack &S,ElemType &e);
Status GetTop (SqStack S,ElemType &e);
int main(){
SqStack S;
InitStack(S);
Push(S,'A');
Push(S,'B');
StackTraverse(S);
ElemType e;
GetTop(S,e);
printf("%c\n",e);
Pop(S,e);
printf("%c\n",e);
StackTraverse(S);
}
Status InitStack (SqStack &S){
S.base = (ElemType*)malloc(sizeof(ElemType)*STACK_INIT_SIZE);
if(!S.base) return ERROR;
S.stacksize = STACK_INIT_SIZE;
S.top=S.base;
return OK;
}
Status GetTop (SqStack S,ElemType &e){
if(S.base==S.top) return ERROR;
e = *(S.top-1);
return OK;
}
Status Push (SqStack &S,ElemType e){
if(S.top-S.base>=STACK_INIT_SIZE) {
S.base = (ElemType*)realloc(S.base,(S.stacksize+STACK_INCERT)*sizeof(ElemType));
if(!S.base) return ERROR;
S.top=S.base+S.stacksize;
S.stacksize+=STACK_INCERT;
}
*(S.top) = e;
S.top++;
return OK;
}
Status Pop (SqStack &S,ElemType &e){
if(S.base==S.top) return ERROR;
S.top--;
e=*(S.top);
return OK;
}
Status StackTraverse (SqStack S){
if (S.base==S.top ) return ERROR;
ElemType *temp=S.top;
while(temp-S.base>0){
temp--;
printf("%c ",*(temp));
}
printf("\n");
}