DataStructure part3 栈
1、栈的概念
栈是限定仅在表尾(栈顶)进行插入和删除操作的线性表
允许插入和删除的一端称为栈顶(top)、另一端为栈底(bottom),不含任何数据元素的栈称为空栈。又称为后进先出的线性表(LIFO结构)
栈的插入操作称为入栈(压栈),栈的删除操作称为出栈(弹栈)
2、栈的抽象数据类型
3、栈的顺序存储结构
1)结构定义
如图所示,栈空、栈满和一般情况如下
2)进栈操作
3)出栈操作
4、两栈共享空间
1)结构:
初始都为空时:top1 = -1, top2 = n。(n为栈的MAXSIZE)
栈1满、栈2空时:top1 = n-1,top2 = n。
栈2满、栈1空时:top1 = -1,top2 = 0。
结论:两栈见面时,满足 top1 + 1 == top2。
2)插入
3)删除
5、栈的链式存储结构(链栈)
1)将栈顶放在链栈的头部,无需头结点
若链栈为空,则是top == NULL
2)结构定义
3)进栈操作
4)出栈操作
6、栈的应用
1)递归
递归函数:我们把一个直接调用自己或通过一系列调用语句间接地调用自己的函数,称为递归函数
如下:(实现斐波拉契数列)
2)四则运算求值
a) 后缀表示法(逆波兰表示法RPN) 9 3 1-3*+10 2/+ =>9+(3-1)*3 + (10/2)
b) 中缀表示法转中缀表示法: 数字直接输出遇到符号(除反括号)入栈,遇到反括号就出栈栈顶元素
如 栈的情况 + ( - 入栈 ---> - ( 出栈 ---> * 入栈 --->*+ 出栈----> ( /入栈 ---> /出栈
9 3 1 - 3 * + 10 2 / +