#include <stdio.h>
#include <stdlib.h>
typedef int SElemType;
#define STACK_INIT_SIZE 100//存储空间初始分配量
#define STACKINCREMENT 10//存储空间分配增量
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}Sqstack;
//构造一个空栈
bool InitStack(SqStack &S){
S.base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));
if(!S.base){
exit(-1);//存储分配失败
}
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return true;
}
//销毁栈S,S不在存在
//销毁成功,返回true
int DestroyStack(SqStack &S){
if (S.base == NULL) exit(1); //栈结构不存在,程序异常退出
free(S.base);
S.base = NULL;
return true;
}
//把S置为空栈
//成功返回true
int ClearStack(SqStack &S){
if(S.base == NULL) exit(1);
S.base = S.top;
return true;
}
//判断是否空栈
//返回,true-空栈,false-非空栈
int StackEmpty(SqStack &S){
if(S.base == NULL) exit(1);
int ret = S.top - S.base ? false : true;
return ret;
}
//返回当前栈的长度
//成功返回当前栈的长度,异常退出
int StackLength(SqStack &S){
if(S.base == NULL) exit(1);
return S.top - S.base;
}
//取出栈顶元素
int GetTop(SqStack &S, int &e){
if(S.top - S.base == 0){
return false;
}
e = *(S.top - 1);
}
//入栈
int Push(SqStack &S, int e){
//插入元素e为新的栈顶元素
if(S.top - S.base >= S.stacksize){//栈满,追加存储空间
S.base = (int *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(int));
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
* S.top++ = e;
return true;
}
//出栈
int Pop(SqStack &S,int &e){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回true,否则返回false
if(S.top - S.base == 0) return false;
e = * --S.top;
return true;
}