栈是仅在表尾进行插入、删除操作的线性表。即栈 S= (a1, a2, a3, ………,an-1, an),其中表尾(即 an 端)称为栈顶 /top,表头(即 a1 端)称为栈底/base。
由于只能在表尾进行操作,因此栈的运算规则就是“后进先出”(LIFO)
提起栈,最常见的用途就是调用函数了,例如JS里面的执行栈,但是栈可以用于递归运算、简化程序等等。
和线性表类似,栈也有两种存储结构——顺序栈与链栈
栈的顺序存储结构——顺序栈
顺序栈的表示与实现
用C语言表示栈的顺序结构
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
SElemType *base; // 栈底指针(始终指向栈底)
SElemType *top; // 栈顶指针
int stacksize; // 当前栈的最大容量
} SqStack;
用下图表示就是
其中: 1. s.base 始终指向栈底 2. s.top 始终指向栈顶元素的下一个位置 3. s.base = NULL 表示栈结构不存在 4. s.top = s.base 表示栈空 5. top-base = stacksize 表示栈满
顺序栈的基本操作
1. 初始化栈
Status initStack(SqStack *S)
{
S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
i