#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int SElemType; #define STACK_INIT_SIZE 100 // 初始大小 #define STACKINCREMENT 10 // 存储空间增量 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 DestroyStack(SqStack &S) { S.top = S.base; S.stacksize = 0; free(S); return OK; } // 清空栈 Status ClearStack(SqStack &S) { if(S.top == S.base) return ERROR; S.top = S.base S.stacksize = STACK_INIT_SIZE; return OK; } // 判断栈是否为空 Status StackEmpty(SqStack S) { if(S.top == S.base) return TRUE; return ERROR; } // 获取栈的长度 int StackLength(SqStack S) { return S.top - S.base; } // 获取栈顶元素 Status GetTop(SqStack S,SElemType &e) { if(S.top == S.base) return ERROR; e = *(S.top - 1); return OK; } // 插入元素 Status Push(SqStack &S,SElemType e) { if(S.top-S.base == S.stacksize) return ERROR; *S.top++ = e; return OK; } // 删除栈顶元素,并用e返回其值 Status Pop(SqStack &S,SElemType &e) { if(S.top == S.base) return ERROR; e = *S.top--; return OK; }