数据结构栈和队列.pptx
《数据结构栈和队列.pptx》由会员分享,可在线阅读,更多相关《数据结构栈和队列.pptx(41页珍藏版)》请在第壹文秘上搜索。
1、数据结构数据结构西安高新学院 数据结构与算法数据结构数据结构西安高新学院一、线性结构(二)栈和队列数据结构数据结构西安高新学院1.1.定义定义与线性表相同,仍为一对一与线性表相同,仍为一对一( 1:1)关系关系。用用顺序栈顺序栈或或链栈链栈存储均可,但以顺序栈更常见存储均可,但以顺序栈更常见只能在只能在运算,且访问结点时依照运算,且访问结点时依照(LIFOLIFO)或或(FILOFILO)的原则。)的原则。关键是编写关键是编写和和函数,具体实现依顺序栈或链函数,具体实现依顺序栈或链栈的存储结构有别而不同。栈的存储结构有别而不同。3. 存储结构存储结构4. 运算规则运算规则5. 实现方式实现方式
2、 2. 逻辑结构逻辑结构限定只能在表的限定只能在表的进行插入和删除运算的线性表。进行插入和删除运算的线性表。即栈顶即栈顶基本操作有基本操作有:建栈、判断栈满或栈空、入栈、出栈、读栈顶元素值等。建栈、判断栈满或栈空、入栈、出栈、读栈顶元素值等。数据结构数据结构西安高新学院q顺序栈的存储结构top=0123450栈空栈顶指针top,指向实际栈顶后的空位置,初值为0top123450进栈Atop出栈栈满BCDEF设数组维数为Mtop=0,栈空,此时出栈,则下溢(underflow)top=M,栈满,此时入栈,则上溢(overflow)toptoptoptoptop123450ABCDEFtoptop
3、toptoptoptop栈空数据结构数据结构西安高新学院 a1 a2 an顺序栈顺序栈S aiQ Q:顺序表和顺序栈的操作有何区别?:顺序表和顺序栈的操作有何区别?表头表头表尾表尾低地址低地址高地址高地址写入:写入:Si= ai读出:读出: e= Si压入压入(SS+=an+1弹出弹出( - 低地址低地址高地址高地址Si a1 a2 ai an 顺序表顺序表S an+1以线性表以线性表 S= (a1 , a2 , . , an-1 , an )为例为例栈底栈底栈顶栈顶数据结构数据结构西安高新学院例1 一个栈的输入序列为1,2,3,若在入栈的过程中允许出栈,则可能得到的出栈序列是什么?答:答:
4、可以通过穷举所有可能性来求解:可以通过穷举所有可能性来求解: 1 1入入1 1出,出, 2 2入入2 2出,出,3 3入入3 3出,出, 即即123123; 1 1入入1 1出,出, 2 2、3 3入,入,3 3、2 2出,出, 即即132132; 1 1、2 2入,入,2 2出,出, 3 3入入3 3出,出, 即即231231; 1 1、2 2入,入,2 2、1 1出,出,3 3入入3 3出,出, 即即213213; 1 1、2 2、3 3入,入,3 3、2 2、1 1出,出, 即即321321;合计有合计有5 5种可能性。种可能性。数据结构数据结构西安高新学院例例2 2:一个栈的输入序列是
5、一个栈的输入序列是12345,若在,若在入栈的过程中允许入栈的过程中允许出栈出栈,则栈的输出序列则栈的输出序列43512可能实现吗可能实现吗?12345的输出的输出呢?呢?答:答:4351243512不可能实现,主要是其中的不可能实现,主要是其中的1212顺序不能实现;顺序不能实现;1234512345的输出可以实现,每压入一数便立即弹出即可。的输出可以实现,每压入一数便立即弹出即可。 数据结构数据结构西安高新学院例例3:设依次进入一个栈的元素序列为c、a、b、d,则可得到出栈的元素序列是: )a,b,c,d )c,d,a,b )b,c,d,a )a,c,d,bA)、)、D)可以,)可以, B
6、)、)、C)不行。)不行。讨论:有无讨论:有无通用的判别原则通用的判别原则?有!若输入序列是有!若输入序列是 ,P,Pj jP Pk kP Pi i (P(Pj jPPk kP0) k=n%d ; push(S , k) ; n=n/d ; /* 求出所有的余求出所有的余数,数,进栈进栈 */while (S.top!=0) /* 栈不空时出栈,输出栈不空时出栈,输出 */ pop(S, e) ; printf(“%1d” , *e) ; 数据结构数据结构西安高新学院栈的应用二:栈的应用二: (2)括号匹配 在文字处理软件或编译程序设计时,常常需要检查一个字符串或一个表达式中的括号是否相匹配?
7、匹配思想匹配思想:从左至右扫描一个字符串(或表达式),则每个右括号每个右括号将与最近遇到的那个左括号相匹配。将与最近遇到的那个左括号相匹配。则可以在从左至右扫描过程中把所遇到的左括号存放到堆栈中。每当遇到一个右括号时,就将它与栈顶的左括号(如果存在)相匹配,同时从栈顶删除该左括号。算法思想算法思想:设置一个栈,当读到左括号时,左括号进栈。当读到右括号时,则从栈中弹出一个元素,与读到的左括号进行匹配,若匹配成功,继续读入;否则匹配失败,返回FLASE。数据结构数据结构西安高新学院 栈的另一个重要应用是在程序设计语言中实现递归调用。栈的另一个重要应用是在程序设计语言中实现递归调用。 递归调用:递归
8、调用:一个函数一个函数( (或过程或过程) )直接或间接地调用自己本身,直接或间接地调用自己本身,简称简称递归递归( (RecursiveRecursive) )。 栈的应用三:栈的应用三: (3)递归处理例如:求求n!n!Fact(n)=1 当当n=0时时 终止条件终止条件n*fact(n-1) 当当n0时时 递推规则递推规则数据结构数据结构西安高新学院 栈是在同一端进行插入和删除运算的线性表,具有先进后出的特性。栈的这种特性正好适用函数嵌套调用(递归)的过程。 (1)调用函数时:系统将为调用者构造一个由参数表和返回地址组成等信息的活动记录,并将其压入到由系统提供的运行时刻栈的栈顶,然后将程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列
