#include<stdio.h>
//#define MaxStackSize 100
//typedef int DataType;
//定义结构体SeqStack
typedef struct {
//顺序堆栈要存放元素的数组,其元素数量的最大值为MaxStackSize
DataType stack[MaxStackSize];
//top表示栈顶的位置
int top;
}SeqStack;
//初始化(初始化顺序堆栈S)
void StackInitiate(SeqStack *S)
{
//初始化栈顶下标值
S->top = 0;
}
//非空否
int StackNotEmpty(SeqStack S)
{
//判断顺序堆栈S是否为空
if(S.top <= 0)
{
//否则返回0
return 0;
}
else
{
//若为非空则返回1
return 1;
}
}
//入栈 (把x存入顺序堆栈S中)
int StackPush(SeqStack *S, DataType x){
//判断顺序堆栈S是否已满
if(S->top >= MaxStackSize){
//已满,入栈不成功,返回0
printf("堆栈已满无法插入!\n");
return 0;
}
//否则,入栈成功,返回1
else{
//将值存入
S->stack[S->top] = x;
//栈顶加一
S->top ++;
return 1;
}
}
//出栈 (取出顺序堆栈S的栈顶元素由参数d带回)
int StackPop(SeqStack *S, DataType *d){
//判断顺序堆栈S是否已经元素已经出栈完
if(S->top <= 0){
//若已经出栈,返回0
printf("堆栈已空无元素出栈!\n");
return 0;
}
//否则出栈,返回1
else{
S->top--;
*d = S->stack[S->top];
return 1;
}
}
//取栈顶元素 (取出顺序栈顶S的当前栈顶元素由参数d带回)
int StackTop(SeqStack S, DataType *d){
//判断顺序堆栈S是否已经元素已经出栈完
if(S.top <= 0){
//若顺序堆栈已空,返回值0
printf("堆栈已空\n");
return 0;
}
//否则,返回值和返回1
else{
*d = S.stack[S.top - 1];
return 1;
}
}
注意:出栈和取栈顶不一样,出栈后要删除原来的位置,而取栈顶则是将栈顶的值复制一遍再输出。