#include<stdio.h>
#include<stdlib.h>
#define Status int
#define STACK_SIZE 100
#define STACKINCREMENT 10
//数据类型
typedef struct
{
int number;
}ElemType;
//存储类型
typedef struct
{
ElemType *base;
ElemType *top;
int StackSize;
}SqStack;
//初始化顺序栈
Status InitStack(SqStack &S)
{
if(!S.base)
{
S.base = (ElemType *)malloc(sizeof(ElemType) * STACK_SIZE);
if(S.base)
return 0;
S.top = S.base;
S.StackSize = STACK_SIZE;
return 1;
}
return 0;
}
//插入元素
Status Push(SqStack &S, ElemType e)
{
if(!S.base)
return 0;
if(S.top>=S.base+S.StackSize)
{
S.base = (ElemType *)realloc(S.base, sizeof(ElemType) * (STACK_SIZE + STACKINCREMENT));
S.top = S.base + S.StackSize;
S.StackSize = S.StackSize + STACKINCREMENT;
}
*S.top++ = e;
return 1;
}
//删除栈顶元素
Status Pop(SqStack &S, ElemType &e)
{
if(!S.base || S.base == S.top)
return 0;
e = *(--S.top);
return 1;
}
//取栈顶元素
Status GetTop(SqStack &S, ElemType &e)
{
if(!S.base || S.base == S.top)
return 0;
e = *(S.top-1);
return 1;
}
//置空栈
Status ClearStack(SqStack &S)
{
if(!S.base || S.base == S.top)
return 0;
S.base = S.top;
return 1;
}
//是否为空栈
Status StackEmpty(SqStack &S)
{
if(!S.base) //表示栈结构不存在
return 0;
if(S.base == S.top) //表示是空栈
return 1;
return 0;
}
//摧毁栈
Status DeStoryStack(SqStack &S)
{
if(!S.base)
return 0;
S.base = S.top = NULL;
free(S.base);
S.StackSize = 0;
return 1;
}
void main()
{
SqStack S;
S.base = NULL;
InitStack(S);
int num;
ElemType x,y;
printf("定义栈\n");
for(int i=0;i<3;i++)
{
scanf("%d",&num);
x.number = num;
Push(S,x);
}
printf("弹出栈顶元素\n");
Pop(S,y);
printf("栈顶元素为%d\n",y.number);
printf("取栈顶元素\n");
GetTop(S,y);
printf("%d\n",y.number);
ClearStack(S);
if(StackEmpty(S))
printf("此时为空栈\n");
DeStoryStack(S);
if(StackEmpty(S))
printf("此时栈不存在\n");
}