#include<stdio.h>
#define MAXSIZE 100 //是顺序栈所能存储的最多元素个数
#define TRUE 1
typedef int datatype;
typedef struct//顺序栈的定义
{
datatype stack[MAXSIZE]; //stack 数组存储栈中所有的数据元素
int top;
} seqstack;//顺序栈的类型定义
seqstack *S;//顺序栈变量定义
//顺序栈的初始化运算
void INITSTACK(seqstack *S)
{
S->top=-1;//将顺序栈设置为空栈
}
//检查顺序栈是否为空栈的运算
int EMPTY(seqstack *S)
{
if(S->top<0)return (TRUE);//若顺序栈为空,函数返回1
else return (NULL);//若顺序栈不为空,函数返回0
}
//向顺序栈中插入元素的运算
seqstack *PUSH(seqstack *S,datatype x)
{
if(S->top>=MAXSIZE-1)//检查顺序栈是否为满栈
{
printf("栈满溢出错误!");
return (NULL); //若为满栈 终止程序
}
else
{
S->top++;//将栈顶指针加1,使之指向新结点
S->stack[S->top]=x;
}
return (S);
}
//从顺序栈中删除栈顶元素的运算
datatype POP(seqstack *S)
{datatype x;
if(S->top<0)//注意是top<0;
{
printf("栈空出错误!");
return (NULL);
}
else
{
x=S->stack[S->top];
S->top--;
return (x);
}
}
//顺序栈取栈顶元素的运算
datatype gettop_seqstack(seqstack *S)
{
if(EMPTY(S))
{
printf("栈是空栈!");
return (NULL);
}
else
return(S->stack[S->top])
}