栈底(Bottom):由于栈顶位置是动态变化的,需要设置栈顶指示器。
栈的常见运算:
进栈或入栈(表尾插入)
出栈或退栈(表尾删除)
栈的特性:后进先出(LIFO)
栈的抽象数据类型定义
数据元素:可以是任意类型的数据,但必须属于同一个数据对象。
关系:栈中数据元素之间是xian线性关系。
基本操作:
(1)InitStack(S) (2)ClearStack(S)
(3) IsEmpty(S) (4)IsFull(S)
(5) Push(S,x) (6)Pop(S,x)
(7) GetTop(S,x)
栈在计算机中主要有两种基本的存储结构:顺序存储结构和链式存储结构
顺序栈:
定义:
用一组连续的存储单元一次存放自栈底到栈顶的数据元素。
设一个位置指针top(栈顶指针)动态指示栈顶元素在顺序栈中的位置。
top=-1 表示空栈。
链栈
链栈的定义及示意图
用C语言定义的链栈结构
链栈的进栈操作
链栈的出栈操作
多栈运算
栈的应用举例
括号匹配问题
括号匹配问题
算法思想:
在检验算法中设置一个栈,若读入的是左括号,则直接入栈,等待相匹配
的同类右括号;若读入的是右括号,且与当前栈顶的左括号同类型,则二者匹配,
将栈顶的左括号出栈,否则属于不合法的情况。
汉诺塔(hanoi)问题的算法实现
void hanoi(int n,char x,char y ,char z)/*将塔座x上按直径由小到大且至上而下编号为1
至n个圆盘按规则搬到塔座Z上,Y可用作辅助塔座*/
{
if(n==1)
move(x,1,z);/*将编号为1的圆盘从x移动z*/
else{
hano(n-1,x,z,y);/*将x上编号为1至n-1的圆盘移到Y,Z作辅助塔*/
move(x,n,z);/*将编号为n的圆盘从x移动到z*/
hano(n-1,x,z);/*将y上编号为1至n-1圆盘移动到z,x辅助塔*/
}
}