#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;
}