数据结构---栈的定义

栈底(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辅助塔*/

}

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值