#include<cstdio> #include<cstdlib> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int Status; typedef int SElemType; typedef struct { int stacksize; SElemType *base; SElemType *top; }SqStack ; Status InitStack(SqStack &S){ S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base) exit(-1); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return 1; } Status Push(SqStack &S,SElemType e){ if(S.top-S.base>=STACK_INIT_SIZE){ S.base=(SElemType*)realloc(S.base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) exit(-1); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return 1; } Status Pop(SqStack &S,SElemType &e){ if(S.base==S.top) return 0; e=*--S.top; return 1; } Status GetTop(SqStack S,SElemType &e){ if(S.top==S.base) return 0; e=*(S.top-1); return 1; } Status StackEmpty(SqStack S){ if(S.top==S.base) return 1; else return 0; } int StackLength(SqStack &S){ return (S.top - S.base); } void DestroyStack(SqStack &S){ free(S.base); S.base=NULL; S.top=NULL; S.stacksize=0; } void ClearStack(SqStack &S){ S.top=S.base; } int main(){ }