![数据结构(C语言版)第三章 栈_第1页](http://file4.renrendoc.com/view/31c185c7c84f53a72ee438468ef019c3/31c185c7c84f53a72ee438468ef019c31.gif)
![数据结构(C语言版)第三章 栈_第2页](http://file4.renrendoc.com/view/31c185c7c84f53a72ee438468ef019c3/31c185c7c84f53a72ee438468ef019c32.gif)
![数据结构(C语言版)第三章 栈_第3页](http://file4.renrendoc.com/view/31c185c7c84f53a72ee438468ef019c3/31c185c7c84f53a72ee438468ef019c33.gif)
![数据结构(C语言版)第三章 栈_第4页](http://file4.renrendoc.com/view/31c185c7c84f53a72ee438468ef019c3/31c185c7c84f53a72ee438468ef019c34.gif)
![数据结构(C语言版)第三章 栈_第5页](http://file4.renrendoc.com/view/31c185c7c84f53a72ee438468ef019c3/31c185c7c84f53a72ee438468ef019c35.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章栈学习要点:理解栈是满足LIFO存取规则的表熟悉定义在抽象数据类型栈上的基本运算掌握用指针实现栈的步骤和方法掌握用数组实现栈的步骤和方法理解用栈解决实际问题的方法3/14/20231第三章栈栈是一种特殊的线性表,是操作受限的线性表,称其为限定性数据结构。
3.1ADT栈(stack)栈的定义和特点定义:限定仅在表首进行插入或删除操作的线性表,表首—栈顶,表尾—栈底,不含元素的空表称空栈特点:先进后出(FILO)或后进先出(LIFO)3/14/20232ana1a2……...栈底栈顶...出栈进栈栈S=(a1,a2,……,an)栈的操作示例3/14/202333.1ADT栈(Stack)ADT栈上定义的常用的基本运算Empty():判断栈空Full():判断栈满Top():返回栈顶元素Push(x):将元素x入栈Pop(x):出栈,并将栈顶元素存入x中3/14/202343.1.1栈应用的简单例子例1、程序编译时的表达式或字符串的括号匹配问题。
例如,算术表达式(x*(x+y)-z),其中位置1和4处有左括号,而位置8和11处有右括号,满足配对要求。但算术表达式(x+y)*z)(,其中位置8处的右括号没有可与之配对的左括号,而位置9处的左括号没有可与之配对的右括号。这里要在栈的基本运算的基础上定义算术表达式(字符串)expr中的圆括号配对检查运算
voidParenthesis(char*expr)3/14/20235例2、回文游戏:顺读与逆读字符串一样(不含空格)dadtop1.读入字符串2.去掉空格(原串)3.压入栈4.原串字符与出栈字符依次比较若不等,非回文若直到栈空都相等,回文例3、多进制输出:字符串:“madamim
adam”例把十进制数159转换成八进制数(159)10=(237)81598198280237余7余3余2toptop7top73top7323/14/202363.2栈的存储结构3.2.1用数组实现栈——顺序栈3.2.1.1实现:一维数组s[M]top=-1123450栈空栈顶指针top,指向实际栈顶后的空位置,初值为-1top123450进栈Atop出栈栈满BCDEF设数组维数为Mtop=-1,栈空,此时出栈,则下溢(underflow)top=M-1,栈满,此时入栈,则上溢(overflow)toptoptoptoptop123450ABCDEFtoptoptoptoptoptop栈空3/14/202373.2.1.2栈的数组实现的优缺点优点:所列的7个基本运算都可在O(1)的时间里完成,效率高。缺点:为了使每个栈在算法运行过程中不会溢出,通常要为每个栈预置一个较大的栈空间。另一方面,由于各个栈的实际大小在算法运行过程中不断变化。经常会发生其中一个栈满,而另一个栈空的情形,空间利用率低。3/14/202383.2.2两个栈共用一个数组的实现2个栈共享一个数组stack[0..n]
利用栈底位置不变的特性,可以将2个栈的栈底分别设在数组stack的两端。然后各自向数组stack的中间伸展,如图所示。好处:提高空间利用率,减少栈发生上溢的可能性。3/14/202393.2.3用指针实现栈—链栈typedef
struct*slink;typedef
struct
snode{StackItemelement;slinknext;}StackNode;链栈结点及用指针实现的栈结点定义3/14/202310入栈算法出栈算法^…...栈底toptopxptop^…...栈底topp3.2.3.1入栈、出栈算法实现及演示:3/14/2023113.2.3.2栈的应用例1、过程的嵌套调用r主程序srrrs子过程1rst子过程2rst子过程33/14/202312例递归的执行情况分析(假设初始w=3)
例2、递归过程及其实现定义:函数直接或间接的调用自身叫递归实现:建立递归工作栈voidprint(intw){inti;if(w!=0){print(w-1);for(i=1;i<=w;++i)printf(“%3d,”,w);
printf(“/n”);}}运行结果:1,2,2,3,3,3,3/14/202313递归调用执行情况如下:主程序(1)print(w)w=3;3print(2);(1)w=3top(2)输出:3,3,3w2print(1);(2)w=2(1)w=3top(3)输出:2,2w1print(0);(3)w=1(2)w=2(1)w=3top(4)输出:1w0(4)w=0(3)w=1(2)w=2(1)w=3topw(3)输出:2,2(2)2(1)3top(4)输出:1(3)1(2)2(1)3top(2)输出:3,3,3(1)3top返回(3)1(2)2(1)3top(4)0结束(1)3/14/202314例3、表达式求值中缀表达式后缀表达式(RPN)a*b+cab*c+a+b*cabc*+a+(b*c+d)/eabc*d+e/+中缀表达式:操作数栈和运算符栈计算2+4-3*6操作数运算符24+操作数运算符6-操作数运算符6-36*操作数运算符6-18操作数运算符123/14/202315后缀表达式求值步骤:1、读入表达式一个字符2、若是操作数,压入栈,转43、若是运算符,从栈中弹出2个数,将运算结果再压入栈4、若表达式输入完毕,栈顶即表达式值;若表达式未输入完,转1top4top43top735top计算4+3*5后缀表达式:435*+top415top193/14/202316(1)(2)(4)(5)(6)(7)(3)例4、地图四染色问题R[7][7]123456712345671000010011111010101101011010110110010
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电影场景衍生品设计的美学价值探讨
- 研发团队创新能力评价模型研究
- 开会时的发言稿
- 现代医学影像技术助力公共卫生事业
- 律师个人工作计划范文
- 电子病历在医疗领域的应用与发展趋势
- 冷链运输车协议书范本
- 长春市写字间租赁合同范本
- 服务合作合同范本
- 石墨产业的市场分析与投资机遇探讨
- 学前比较教育第二版全套教学课件
- 危重症呼吸支持治疗
- 操作工考核评分表
- 不忘教育初心-牢记教师使命课件
- 药品不良反应及不良反应报告课件
- 俄罗斯水资源现状分析
- FSC认证培训材料
- 非法捕捞水产品罪
- Germany introduction2-德国国家介绍2
- 新概念第一册单词汇总带音标EXCEL版
- 作用于血液及造血器官的药 作用于血液系统药物
评论
0/150
提交评论