//定义结构
#define INITSIZE 10;
typedef int ElemType;
typedef struct stack
{
ElemType *data; //栈底指针
int top; //栈顶指针 -- 以数组下标来表示
int size; // 栈空间大小
}stack;
//初始化
void InitStack(Stack *st)
{
if(st == NULL) exit(0);
st->data = (ElemType *)malloc(sizeof(ElemType ));
if(st->data == NULL) exit(0);
st->top = 0;
st->size = INITSIZE ;
}
//创建新空间
static int AppendSpace(Stack *st)
{
ElemType *s =(ElemType *)malloc(sizeof(ElemType )*st->size*2);
//把原来st->data空间中的数据全部移到s空间上
for(int i ; i<st->top ; ++i)
{
s[i] = st->data[i];
}
free(st->data); //将原来的内存释放,防止内存泄露的发生
st->data = s;
st->size*=2;
return 1;
}
//压栈
void PushStack(Stack *st , ElemType val)
{
if(st == NULL) exit(0);
//栈满
if(st->top == st->size)
{
if( !AppendSpace (st))
{
return;
}
}
st->data[st->top++] = val;//相当于st->data[st->top] = val , st->top++;
}
//判空
int Empty(Stack *st)
{
if(st == NULL) exit(0);
return st->top == 0 ? 1 : 0 ;
}
//出栈
void PushStack(Stack *st)
{
if(st == NULL) exit(0);
if(Empty(st)) return;
st->top--;
}
//获取栈顶元素
int Top(Stack *st , ElemType *result)
{
if(st == NULL) exit(0);
if(Empty(st))
{
return 0;
}
*result = st->data[st->top-1];
return 1;
}
//销毁
void DestroyStack(Stack *st)
{
if(st == NULL) exit(0);
free(st->data);
st->data=NULL;
st->top = st->size = 0;
}