数据结构与算法(Java语言版)课件 第7、8章 栈与Stack类、 队列与ArrayDeque类.pptx

数据结构与算法(Java语言版)课件 第7、8章 栈与Stack类、 队列与ArrayDeque类.pptx

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第7章栈与Stack类2024/11/91

7.1栈的特点2024/11/92栈擅长在线性表的尾部,即栈顶操作,栈是受限的线性表。压栈时,最先进栈的节点在栈底,最后进栈的节点在栈顶(俗话说,垒墙的砖,后来者居上),弹栈时,从栈顶开始弹出节点,最后一个弹出的节点是栈底节点。栈是一种后进先出的数据结构,简称LIFO(LastInFirstout)

7.2栈的创建与独特方法2024/11/93StackE是VectorE的子类,因此StackE类的实例属于顺序表,即其中的节点的逻辑结构是线性结构,节点的存储结构是顺序存储。StackE泛型类的实例使用数组管理节点,因此节点就是对象,后面的叙述不再说节点里的对象。

2024/11/947.2栈的创建与独特方法●创建栈使用StackE泛型类声明栈时,必须要指定E的具体类型,类型是类或接口类型(不可以是基本类型,比如int、float、char等),即指定栈中节点的类型。例如,指定E是String类型:StackStringstack=newStack();或StackStringstack=newStackString();StackE泛型类的实例使用数组管理节点,因此节点就是对象,后面的叙述不再说节点里的对象。空栈默认的内部数组的长度是10(可以将内部数组理解为一块连续的内存空间)。

2024/11/957.2栈的创建与独特方法●独特的方法????例子1中的主类Example7_1使用了栈的独特方法。Example7_1.java例子1

7.3栈与回文串2024/11/96回文串是指和其反转(倒置)相同的字符串,例如:racecar,123321,level”,toot,civic,pop,eye,rotator,pip都是回文串。我们曾在第3章例子4,使用递归方法判断一个字符串是否是回文串。

2024/11/977.3栈与回文串Example7_2.java例子2如果一个字符串的长度是偶数,只要判断字符串的前一半和后一半是否相同即可,如果一个字符串的长度是奇数,只要忽略字符串中间的字符,然后判断字符串的前一半和后一半是否相同即可。那么利用栈的特点,首先将字符串的字符逐个进栈,然后弹出一半字符压入另一个栈,然后比较两个栈中的字符是否相同,就可以判断一个字符串是否是回文串。

7.4栈与递归2024/11/98递归过程就是方法地址被压栈、弹栈的一个过程,所以,也可以利用栈这种数据结构,把某些递归算法改写为迭代算法。

2024/11/997.4栈与递归Example7_3.java例子3例子3主类Example7_3中利用栈输出Fibonacci序列的前16项(有关Fibonacci序列的知识点和递归算法,参见第3章例子2)。

2024/11/9107.4栈与递归Example7_4.java例子4例子4主类Example7_4中利用栈描述汉诺塔搬运盘子,这里的迭代算法,尽管比第3章例子12简单,但却无法显示盘子的号码,所以不是严格意义的替代递归的迭代算法(有关汉诺塔的知识点和递归、迭代算法,参见第3章例子11和例子12)。

7.5栈与undo操作2024/11/911栈的“后进先出”的特点,适合用于设计undo操作,即撤销操作。撤销操作就是取消当前操作结果、恢复到上一次操作的结果。我们经常使用撤销操作,对此并不陌生,比如我们在编辑文本时,经常单击编辑器提供的“撤销”快捷按钮撤销刚刚键入文字,让文档恢复到上一次编辑操作的样子。可以用栈来实现undo操作,即把一系列操作结果压入栈中,当用户想回到上一步骤时,进行弹栈、弹出栈顶节点的对象,刚好是上一次的操作结果,恢复这个结果即可。可以不断地进行弹栈操作,直到栈为空,即恢复到最初的操作结果。

2024/11/9127.5栈与undo操作Example7_5.java例子5例子5的主类中的窗体有一个标签组件,用户单击“显示一个汉字”按钮可以在标签上显示一个汉字。但标签上只保留最后一次显示的汉字。当用户单击“撤销”按钮时,将取消用户最近一次单击“显示一个汉字”按钮产生的操作效果,即将标签上的汉字恢复为上一次单击“显示一个汉字”按钮所得到的汉字。

7.6栈与括号匹配2024/11/913栈的特点使得它很适合被用来检查一个字符串中的括号是否是匹配的,即左、右括号是否是成对的。算法如下:

2024/11/9147.6栈与括号匹配Match.java例子6例子6中的Match类的isMatch(Strings)方法判断一个s中的字符串中的括号是否是匹配的。例子6的主类Example7_6中,判断了几个字符串中的而括号是否匹配。Example7_6.java

7.6栈与深度搜索2024/11/9

您可能关注的文档

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档