栈只允许在有序的线性资料集合的一端(top)进行加入数据(push)和移除数据(pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作。
两种栈的实现方式: 1.顺序栈(数据实现) 2.链式栈(链表实现)
1.顺序栈(数组实现栈)
顺序栈的实现
0.准备工作
#define OK 1
1.构建空栈
// 构建一个空栈S
2.将栈置空
// 将栈置空
3.判断顺序栈是否为空
// 判断顺序栈是否为空;
4.返回栈的长度
// 返回栈的长度
5.获取栈顶元素
// 获取栈顶
6. push元素e为新栈顶元素
// 插入元素e为新栈顶元素
7. pop S栈顶元素,并且用e带回
// popS栈顶元素,并且用e带回
8. 从栈底到栈顶依次对栈中的每个元素打印
// 从栈底到栈顶依次对栈中的每个元素打印
9.使用栈并打印
// 使用栈
打印出来的结果
2.链式栈
0.结构
1.入栈(push)
- 第0步:创建节点node
- 第1步: 把创建的node的next指向栈顶top
- 第2步:把top指向创建的node
2.出栈(pop)
- 第1步: 记录需要弹出的节点P
- 第2步: 把top指向top的next节点
- 第3步: 释放节点P
链式栈的实现
0.准备工作
#define OK 1
1.构造一个空栈S
// 构造一个空栈S
2.把链栈S置为空栈
Status
3. 检测空栈
// 若栈S为空栈,则返回TRUE, 否则返回FALSE
4.栈的长度
// 返回S的元素个数,即栈的长度
5. 获取栈顶元素
// 若链栈S不为空,则用e返回栈顶元素,并返回OK ,否则返回ERROR
6. 入栈(Push)
// 插入元素e到链栈S (成为栈顶新元素)
7. 出栈(Pop)
// 若栈不为空,则删除S的栈顶元素,用e返回其值. 并返回OK,否则返回ERROR
8.遍历链栈
// 遍历链栈,其实就是遍历链表
9.使用和打印
int
打印的结果: