#include <stdio.h>
#include <stdlib.h>
#define stackmax 10000 //存储空间初始分配量
#define stacknum 10000 //存储空间分配增量
typedef int ElemType;
typedef struct
{
ElemType *base;//栈底指针
ElemType *top; //栈顶指针
int stacksize;
}SqStack;
int InitStack(SqStack &s) // 构造一个空栈S
{
s.base = (ElemType*) malloc (stackmax*sizeof(ElemType));
if (! s.base)
exit(0); //存储分配失败
s.top = s.base;//空栈条件
s.stacksize = stackmax; //栈的存储空间初始分配量
return 0;
}
int Push(SqStack &s , int e)// 插入元素e为新的栈顶元素(创建一个栈)
{
if(s.top-s.base >= s.stacksize)// 当前存储空间已满,增加分配
{
s.base = (ElemType *)realloc(s.base,(s.stacksize+stacknum)*sizeof(ElemType));
if (! s.base ) exit(0); // 存储分配失败
s.top = s.base + s.stacksize;
s.stacksize += stacknum; //增加存储容量
}
*s.top++=e;
}
void putstack(SqStack &s)// 出栈
{
while(s.top > s.base)
{
printf("%d", *(s.top-1));
s.top--;
}
}
int Pop(SqStack &s, ElemType &e )//若栈不空,则删除S的栈顶元素,并用e返回其值,并返回OK,否则返回error
{
if(s.top == s.base) return 0;
e=*--s.top;
return 1;
}
int GetTop(SqStack &s, ElemType &e)//若栈不空,则用e返回S的栈顶元素,并返回OK,否则返回ERROR
{
if(s.top == s.base) return 0;
e=*(s.top-1);
return 1;
}
int StackEmpty(SqStack &s)//判断栈空,若栈为空栈,则返回TRUE,否则 返回FALSE
{
if(s.top == s.base)
return 1;
else
return 0;
}
int DestroyStack(SqStack &s)//销毁栈
{
free(s.base);
s.base=s.top=NULL;
s.stacksize=0;
return 1;
}
int ClearStack(SqStack &s)//清空栈
{
s.top=s.base;
return 1;
}
int StackLength(SqStack &s)//获取栈中已有数据的长度
{
return s.top-s.base; //注意:地址指针相减,结果并不是地址差,而是实际元素的差值。
}