刘勇3栈和队列.ppt

上传人:豆**** 文档编号:58161616 上传时间:2022-11-07 格式:PPT 页数:27 大小:3.35MB
返回 下载 相关 举报
刘勇3栈和队列.ppt_第1页
第1页 / 共27页
刘勇3栈和队列.ppt_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《刘勇3栈和队列.ppt》由会员分享,可在线阅读,更多相关《刘勇3栈和队列.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、刘勇3栈和队列 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望定义定义定义定义 只允许在一端插入和删除的线性表;只允许在一端插入和删除的线性表;只允许在一端插入和删除的线性表;只允许在一端插入和删除的线性表;允许插入和删除的一端称为允许插入和删除的一端称为允许插入和删除的一端称为允许插入和删除的一端称为栈顶栈顶栈顶栈顶(top)(top),另一另一另一另一端称为端称为端称为端称为栈底栈底栈底栈底(bottom)(bottom)。特点特点特点特点 后进先出后进先出后

2、进先出后进先出(LIFO)(LIFO)栈栈(Stack)退栈进栈a0an-1an-2topbottom11/6/20222北京化工大学信息学院 数据结构ADT Stack /对象对象:由数据类型为由数据类型为StackData的元素构成的元素构成 void push(StackData x);/进栈进栈 void pop();/出栈出栈 StackData top();/取栈顶取栈顶 bool isEmpty();/判栈空否判栈空否 bool isFull();/判栈满否判栈满否(顺序栈顺序栈)栈的主要操作栈的主要操作11/6/20223北京化工大学信息学院 数据结构 top空栈toptopt

3、optoptopa 进栈b 进栈aababcdee 进栈abcdef 进栈溢出abdee 退栈c11/6/20224北京化工大学信息学院 数据结构topc 退栈b 退栈abaa 退栈空空栈topabdd 退栈ctopabctoptop11/6/20225北京化工大学信息学院 数据结构栈的链接表示栈的链接表示 链式栈链式栈链式栈无栈满问题,空间可扩充链式栈无栈满问题,空间可扩充链式栈无栈满问题,空间可扩充链式栈无栈满问题,空间可扩充插入与删除仅在栈顶处执行插入与删除仅在栈顶处执行插入与删除仅在栈顶处执行插入与删除仅在栈顶处执行链式栈的栈顶在链头链式栈的栈顶在链头链式栈的栈顶在链头链式栈的栈顶在链

4、头适合于多栈操作适合于多栈操作适合于多栈操作适合于多栈操作top11/6/20226北京化工大学信息学院 数据结构栈的应用举例栈的应用举例 1 八进制数八进制数11/6/20227北京化工大学信息学院 数据结构栈的应用举例栈的应用举例 2 括号匹配括号匹配()()()()匹配)(不匹配()不匹配后后出现的左括号出现的左括号先先匹配匹配 栈栈11/6/20228北京化工大学信息学院 数据结构11/6/20229北京化工大学信息学院 数据结构栈的应用举例栈的应用举例 3 行编辑程序行编辑程序#退格符 退行符switch(ch)case#:s.pop();break;case:s.clear();b

5、reak;default:s.push(ch);break;11/6/202210北京化工大学信息学院 数据结构栈的应用举例栈的应用举例 4 迷宫迷宫到了一个位置,先往东东走,走不通再顺时针换方向往南,西,北11/6/202211北京化工大学信息学院 数据结构栈的应用举例栈的应用举例 4 迷宫迷宫求迷宫路径算法的基本思想是:求迷宫路径算法的基本思想是:1、起点、起点S入栈入栈2、反复执行以下步骤,直到栈为空,或者找到终点、反复执行以下步骤,直到栈为空,或者找到终点E(1)取栈顶)取栈顶m,标记,标记m已被访问,根据已被访问,根据m的方向找到下一个位置的方向找到下一个位置next;(2)如果)如

6、果next不是墙壁,也没有被访问过,将不是墙壁,也没有被访问过,将next入栈入栈(3)否则换方向继续找下一个位置)否则换方向继续找下一个位置(4)4个方向都不能通过,出栈,回到第(个方向都不能通过,出栈,回到第(1)步)步3、找到终点、找到终点E,迷宫走出,迷宫走出 在找到终点在找到终点E之前,栈空了,说明迷宫没有出去的路径之前,栈空了,说明迷宫没有出去的路径11/6/202212北京化工大学信息学院 数据结构栈的应用举例栈的应用举例 5 表达式运算表达式运算11/6/202213北京化工大学信息学院 数据结构栈的应用举例栈的应用举例 5 表达式运算表达式运算11/6/202214北京化工大

7、学信息学院 数据结构栈的应用举例栈的应用举例 5 表达式运算表达式运算操作数栈D,运算符栈O1、操作数入栈D2、遇到运算符OP1,和O栈顶运算符OP2比较:(1)如果OP2优先级高,则将两个栈的元素出栈,做运算,将运算结果入栈D;(2)如果OP1优先级高,OP1入栈O11/6/202215北京化工大学信息学院 数据结构栈的应用举例栈的应用举例 6 出栈合法性出栈合法性算法:1、辅助数组 bool isPushedN+1=false,1入栈S,isPushed1=true2、遍历出栈序列,对每个数字n,执行以下操作:(1)取S栈顶t,将t,t+1,t+2.n的所有不曾入栈的数字入栈,并在辅助数组

8、中标记对应下标为true(2)取S栈顶t,若s=n,S出栈;若s!=n,则出栈序列非法。已知自然数1,2,.,N(1=N=100)依次入栈,请问序列C1,C2,.,CN是否为合法的出栈序列。如3 4 2 1 5是合法的而3 5 1 4 2不是合法的11/6/202216北京化工大学信息学院 数据结构定义定义定义定义队列是只允许在一端删除,在另一端插入的线性表队列是只允许在一端删除,在另一端插入的线性表队列是只允许在一端删除,在另一端插入的线性表队列是只允许在一端删除,在另一端插入的线性表允许删除的一端叫做允许删除的一端叫做允许删除的一端叫做允许删除的一端叫做队头队头队头队头(front)(fr

9、ont),允许插入的一端叫,允许插入的一端叫,允许插入的一端叫,允许插入的一端叫做做做做队尾队尾队尾队尾(rear)(rear)。特性特性特性特性先进先出先进先出先进先出先进先出(FIFO,First In First Out)(FIFO,First In First Out)a0 a1 a2 an-1frontrear队列队列(Queue)11/6/202217北京化工大学信息学院 数据结构ADT Queue/对象对象:由数据类型为由数据类型为QueueData的元素构成的元素构成 void push(QueueData x);/进队进队 void pop();/出队出队并取队头并取队头 Q

10、ueueData front();/取队头取队头 bool isEmpty();/判队空否判队空否 bool isFull();/判队满否判队满否(顺序队列顺序队列)队列的主要操作队列的主要操作11/6/202218北京化工大学信息学院 数据结构队列的进队和出队队列的进队和出队 front rear空队列front rearA进队Afront rearB进队A Bfront rearC,D进队A B C Dfront rearA退队B C Dfront rearB退队C Dfront rearE,F,G进进队C D E F GC D E F Gfront rearH进进队,溢出11/6/202

11、219北京化工大学信息学院 数据结构队列的进队和出队原则队列的进队和出队原则n 进队时队尾指针先进一进队时队尾指针先进一进队时队尾指针先进一进队时队尾指针先进一 rear=rear+1rear=rear+1,再将新,再将新,再将新,再将新元素按元素按元素按元素按 rear rear 指示位置加入。指示位置加入。指示位置加入。指示位置加入。n n 出队时队头指针先进一出队时队头指针先进一出队时队头指针先进一出队时队头指针先进一 front=front+1front=front+1,再将,再将,再将,再将下标为下标为下标为下标为 front front 的元素取出。的元素取出。的元素取出。的元素取

12、出。n 队满时再进队将队满时再进队将队满时再进队将队满时再进队将溢出出错溢出出错溢出出错溢出出错;n n 队空时再出队将队空时再出队将队空时再出队将队空时再出队将队空处理队空处理队空处理队空处理。n n 解决办法之一:将队列元素存放数组首尾相接,解决办法之一:将队列元素存放数组首尾相接,解决办法之一:将队列元素存放数组首尾相接,解决办法之一:将队列元素存放数组首尾相接,形成形成形成形成循环循环循环循环(环形环形环形环形)队列队列队列队列。11/6/202220北京化工大学信息学院 数据结构队列存放数组被当作首尾相接的表处理。队列存放数组被当作首尾相接的表处理。队列存放数组被当作首尾相接的表处理

13、。队列存放数组被当作首尾相接的表处理。队头、队尾指针加队头、队尾指针加队头、队尾指针加队头、队尾指针加1 1时从时从时从时从QueueSize-1QueueSize-1直接进到直接进到直接进到直接进到0 0,可,可,可,可用语言的取模用语言的取模用语言的取模用语言的取模(余数余数余数余数)运算实现。运算实现。运算实现。运算实现。队头指针进队头指针进队头指针进队头指针进1:1:front=(front+1)%QueueSize front=(front+1)%QueueSize;队尾指针进队尾指针进队尾指针进队尾指针进1:1:rear=(rear+1)%QueueSizerear=(rear+1

14、)%QueueSize;队列初始化:队列初始化:队列初始化:队列初始化:frontfront=rearrear=0;=0;队空条件:队空条件:队空条件:队空条件:frontfront =rearrear;队满条件:队满条件:队满条件:队满条件:(rear+1)%QueueSize(rear+1)%QueueSize=front front 循环队列循环队列(Circular Queue)11/6/202221北京化工大学信息学院 数据结构01234567front01234567front01234567frontrearAABCrearrear空队列空队列A进进队队B,C进进队队012345

15、6701234567A退退队队B退退队队01234567D,E,F,G,H,I进进队队frontBCrearAfrontBCrearfrontCrearDEF GHI11/6/202222北京化工大学信息学院 数据结构队列的链接表示队列的链接表示 链式队列链式队列队头在链头,队尾在链尾。队头在链头,队尾在链尾。链式队列在进队时无队满问题,但链式队列在进队时无队满问题,但有队空问题。有队空问题。队空条件为队空条件为 front=NULLfrontrear11/6/202223北京化工大学信息学院 数据结构队列的应用举例队列的应用举例 逐行打印二项展开式逐行打印二项展开式(a+b)i 的系数的系数

16、杨辉三角形杨辉三角形 (Pascals triangle)11/6/202224北京化工大学信息学院 数据结构分析第分析第 i 行元素与第行元素与第 i+1行元素的关系行元素的关系从前一行的数据可以计算下一行的数据从前一行的数据可以计算下一行的数据0 1 1 0ts+ti=40 1 3 3 1 0si=51 4 6 4 1i=30 1 2 1 011/6/202225北京化工大学信息学院 数据结构从第从第 i 行数据计算并存放第行数据计算并存放第 i+1 行数据行数据1 2 1 0 1 3 3 1 0 1 4 6s=0 t=1 t=2 t=1 t=0 t=1 t=3 t=3 t=1 t=0 t=1s+t s=t s=t s=t s=t s=t s=t s=t s=ts+t s+t s+t s+t s+t s+t s+t s+t11/6/202226北京化工大学信息学院 数据结构求第求第n层算法:层算法:(1)初始化队列为)初始化队列为0 1 0,将第将第2、3步循环步循环n-1次次(2)将队列的前两个元素)将队列的前两个元素s,t求和,结果入队,删除求和,结果入队,删除队首队首s,直到,直到t为为0为止为止(3)0入队入队11/6/202227北京化工大学信息学院 数据结构

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁