数据结构与算法C4汇.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与算法C4汇

第4章 特殊线性表─栈、队、串 ? 栈、队列、串是常用数据结构。其中栈与队列不仅 可直接用于描述问题,而且大量用于算法的实现中。串多用于直接描述非数值的简单信息。 从数据元素间的逻辑关系看,栈、队列与串是线性 表,但从操作方式与种类看,它们与线性表有许多不同。因此,若把数据间逻辑关系与相应的操作作为整体看待(即作为抽象数据类型),它们应为新的数据结构。事实上,栈与队列是操作受限的线性表,串是元素受限的线性表。尽管它们与线性表有许多 共同点,但也有不少特殊性。 §4.1 栈 §4.1.1 栈的逻辑结构 (一) 基本概念 ? 栈是一种限定仅在表的一端进行插入与删除的线性表。允许进行插入与删除的这一端称为栈顶,而另一端称为栈底,不含元素的空表称为空栈,插入与删除分别称进栈与出栈。见图 4?0。 由于插入与删除只能在同一端进行,所以较先进栈的元素,在进行出栈操作时,较后才能出栈。特别是,最先进栈者,最后才能出栈,而最晚进栈者,必最先出栈。因此,栈也称作先进后出(First InLast Out)的线性表,简称FILO表。 在现实世界中,也有许多符合栈模型的例子。例如,火车扳道站、单车道死胡同等,都是栈的例子。在计算机系统中,栈的例子更是多见,例如,记录中断返回地址(断点)的结构就是栈。 ? ??? 在中断发生时,为了处理完中断事件后恢复被中断程序的继续执行,需记下断点。在允许多级中断的情况下,中断处理过程仍可能被其它中断所中断,因此,系统可能同时要保存多个断点。由于中断恢复是先恢复最近被打断的过程,所以断点的保存次序与取出次序正好相反,这正好满足栈的特性。 栈中元素除具有线性关系外,还具有先进后出的特性,所以在应用时,应根据这两点决定是否使用栈。 通过使用栈,可以产生一定规则的排列次序。例如,我们假定有n个元素1,2,…,n,它们按1,2, …, n的次序进栈,i进栈时 1~(i- 1)都已进过栈,其中某些因素也可以已经按规则出了栈。 每种元只 允许进一次栈。而出栈无具体规定(即可随时出栈),每个元素位于栈顶时就可以出栈了。 这样,每种完全进 出栈后.出栈次序都是这n个元素的一个全排列。全排列最多有n! 种例如,对n=3,则全 排列有3!=6种,其中可能的出栈次序是: 123:1进—1出—2进—2出—3进—3出 132:1进—1出—2进—3进—3出—2出 213:1进—2进—2出—1出---3进—3出 231:1进—2进—2出—3进—3出—1出 321:1进—2进—3进—3出—2出—1出 不可能的次序是:3 1 2 从该例看出,在可能的出栈序列中,若对任意元素k,若它后 面有小于它的元素,则这些小于它的元素必须以“逆序”出现。例如, n=4时,1423是不可能的出栈序列,因为4后面的23是顺序排列。 据此,对于一般的n,可设计算法,编写一个计算机程序,找出所有的可能出栈次序和不可能出栈次序。 (二) 栈抽象模型 u ?这里,我们将栈视为一个抽象对象/类(亦称 接 口),即不考虑它的具体数据结构存储,不考虑 基本操作的实现,只考虑它的基本操作的接口 (输入/输出)。该抽象对象/类从面向对象观点定 义了栈的属性、方法。由于是抽象的,所以,该 类无具体对象,只用做派生各种对象/类,例如, 下面将介绍的栈的顺序存储和链式存储所对应的 类均是这里的抽象类的派生类。 u?? 从基本操作上看,栈是线性表的子集,故应当是 线性表的父类,这样,线性表类也可以共享栈的 方法。 template class TElem //设栈元素可以是任意类型,故使用类模板,用 TElem代表可变元素类型 class TStack0 { protected: long len; public: long GetLen(void) {return len; }; char IsEmpty() {return (len=0)? 1:0; };

文档评论(0)

liwenhua00 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档