- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章栈的表示与实现
(159)10=(237)8 159 8 19 8 2 8 0 2 3 7 余 7 余 3 余 2 top top 7 top 7 3 top 7 2 3 * 进制转换算法分析 Void conversion ( ){ InitStack ( S ); //构造空栈 scanf ( %d , N ); while ( N ) { Push( S, N%8 ); N=N/8; } while ( Pop( S, e )) { printf( %d , e ); } }// conversion * 例2: 括号匹配的检验 Description 现在,有一行括号序列,请你检查这行括号是否配对。 Input 第一行输入一个数N(0N=100),表示有N组测试数据。 后面的N行输入多组输入数据,每组输入数据都是一个字符串S。数据保证S中只含有[,],(,)四种字符。 Output 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No。 Sample Input 4 [())] ()] (() ([]) Sample Output No No No Yes * 算法的设计思想: 1)凡出现左括弧,则进栈; 2)凡出现右括弧,首先检查栈是否空 若栈空,则表明该“右括弧”多余,不匹配 否则和栈顶元素比较, 若相匹配,则“左括弧出栈” 否则表明不匹配 3)表达式检验结束时, 若栈空,则表明表达式中匹配正确 否则表明“左括弧”有余,不匹配 * [())] Push(s,e) [ Push(s,e) ( [())] [())] [())] Pop(s,e) [())] 算法的设计思想: 1)凡出现左括弧,则进栈; 2)凡出现右括弧,首先检查栈是否空 若栈空,则表明该“右括弧”多余,不匹配 否则和栈顶元素比较, 若相匹配,则“左括弧出栈” 否则表明不匹配 3)表达式检验结束时, 若栈空,则表明表达式中匹配正确 否则表明“左括弧”有余,不匹配 * ()] Push(s,e) ( ()] ()] Pop(s,e) ()] 算法的设计思想: 1)凡出现左括弧,则进栈; 2)凡出现右括弧,首先检查栈是否空 若栈空,则表明该“右括弧”多余,不匹配 否则和栈顶元素比较, 若相匹配,则“左括弧出栈” 否则表明不匹配 3)表达式检验结束时, 若栈空,则表明表达式中匹配正确 否则表明“左括弧”有余,不匹配 * (() Push(s,e) ( Push(s,e) ( (() (() (() Pop(s,e) 后进先出应用场景:网页的后退功能,很多软件提供的撤销功能等 * 第三章 栈和队列 问题提出 问题1:食堂打饭队伍 食堂打饭队伍是线性结构吗? 它运算规则和线性表一样吗? 银行叫号系统、医院挂号系统..... 特点:是线性结构,但是只能在一端插入,在另一端删除,“先进先出”。 队列 问题2:word中的提供的撤销/恢复功能如何实现的? word中用户的操作步骤是线性结构吗? 它的运算规则和线性表一样吗? 弹夹中子弹的放入与取出、物流车货物的装卸、网页的后退功能。 特点:是线性结构,但是删除和插入操作只能在一端进行,“后进先出”。 栈 3.1 栈(Stack) 3.2 队列(Queue) 第三章 栈和队列 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 基本操作 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 基本操作 * 1. 定义: 3.1 栈 与线性表相同,仍为一对一( 1:1)关系。 用顺序栈或链栈存储均可,顺序栈更常见 只能在栈顶运算,且访问结点时依照后进先出(LIFO)或先进后出(FILO)的原则。 建栈、判断栈满或栈空、入栈、出栈、读栈顶元素值,等等。 3. 存储结构: 4. 运算规则: 5. 基本操作: 2.逻辑结构: 限定只能在表的一端进行插入和删除运算的线性表。 即栈顶 * 栈的顺序存储结构 * an ... a3 a2 a1 例如: 栈 S= (a1, a2 , a3, ………,an-1, an ) an称为栈顶元素 a1称为栈底元素 栈顶 栈底 插入元素到栈顶的操作,称为入栈。 从栈顶删除最后一个元素的操作,称为出栈。 例1:一个栈的输入序列为1,2,3,若在入栈的过程中允许出栈,则可能得到的出
文档评论(0)