#include<iostream.h> #include<stdlib.h> #define STACK_INIT_SIZE 100; #define STACKINCREMENT 10; #define OVERFLOW -2; #define ERROR -1; #define OK 1; #define FALSE 0; #define TRUE 1; typedef int Status; typedef char SElemType;
typedef struct{ SElemType * base; SElemType * top; int stacksize; }SqStack; Status InitStack(SqStack &S) { S.base=(SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType)) ; if (!S.base) exit (OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; } Status Push(SqStack &S,SElemType &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; return OK; } Status Pop(SqStack &S,SElemType &e) { if(S.top==S.base)return ERROR; e=*--S.top; return OK; } Status StackEmpty(SqStack S); { if(S.top==S.base) return TRUE; else return FALSE; }
void main(){ SqStack S; SElemType x,y; InitStack(S); x='c';y='k'; Push(S,x); Push(S,'a'); Push(S,y); Pop(S,x);Push(S,'a'); Push(S,x); Pop(S,x); Push(S,'s'); while (!StackEmpty(S)){Pop(S,y);cout<<y;} cout<<x; }