栈是是一种限定性的线性表,它将线性表的插入和删除限定为仅在表的一端进行。将表中允许插入和删除的一端成为栈顶。所以栈顶的位置是不断动态变化的。它具有“后进先出”的特点。因为栈是由线性表实现的,所以,栈有两种存储结构:顺序存储和链式存储。对应的栈成为顺序栈和链式栈。下面,分别来介绍这两种栈的相关操作。
一、顺序存储
程序代码
# include <stdio.h>
// 顺序栈的定义
#define MaxSize 10
typedef struct{
int data[MaxSize]; // 静态数组存放栈中元素
int top; // 栈顶指针 指向数组下标,从0开始
}SqStack;
// 1、初始化
bool InitStack(SqStack &S){
S.top = -1; // 初始化栈顶指针
return true;
}
// 2、判断栈空
bool IsEmpty(SqStack S){
if(S.top == -1){ // 栈空
return true;
}else{
return false;
}
}
// 3、入栈
bool PushELem(SqStack &S,int e){
if(S.top == MaxSize - 1){ // 栈满,不能插入新元素
return false;
}
S.top = S.top + 1; // 先将栈顶指针 +1
S.data[S.top] = e; // 新元素入栈
// 两行合并
// S.data[++S.top] = e 指针先加 1 ,再入栈
return true;
}
// 4、出栈
bool PopElem(SqStack &S,int &e){ // 元素出栈