队—栈转换器探究和实现.docVIP

  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文档。上传文档
查看更多
队—栈转换器探究和实现

队—栈转换器探究和实现   摘要:队-栈转换器体现了栈和队列的两个重要线性结构的各种优点。队-栈转换器与队列和栈的入对栈相同,都是在一端进入,而出对栈不但可以在对栈顶(top)、对栈底(bottom)出对栈,还可以在对栈的任意位置出对栈,所以中间要加一个中间对栈指针(mid)。 关键词:线性结构;队列;栈;对栈 中图分类号:TP303文献标识码:A文章编号:1672-7800(2012)010-0017-02 基金项目:西华师范大学校基金项目(10A009) 作者简介:王天良(1986-),男,西华师范大学计算机学院硕士研究生,研究方向为数据结构、网络安全;陈亚军(1965-),男,博士,西华师范大学物理与电子信息学院教授、硕士生导师,研究方向为电子信息技术、计算机应用技术、人工神经网络及应用。 0引言 队列和栈是两个重要的线性结构。从数据结构的角度来看,队列和栈也是线性表,它们的特殊性在于队列和栈的基本操作是线性表操作的子集,它们是操作受限的线性表,因此可称为限定性的数据结构。但从数据类型角度看,它们是和线性表大不相同的两个重要抽象数据类型。由于它们广泛应用地各个软件系统中,因此在面向对象的程序设计中,它们是多型数据类型。 1对栈转化器的概念 为满足系统功能需求,数据结构的算法也在不断地优化、发展,队列和栈的功能也出现了局限性,队列和栈的相互转换需要复杂的算法建立联系。可以在队列或栈前添加一个状态位(对栈转换器),方便地实现对栈的相互转换,提高算法的效率以及减少算法的时间复杂度。增加中间指针(mid),可以在指定位置添加或删除元素,具有一般线性表的特点,更加方便、灵活。 队-栈不像队列和栈对插入、删除等操作的位置有严格的限定,但是也不像一般线性表对任意元素随意操作,它对数据的插入删除有严格的规定限制。对于对栈来说,表尾端称为对栈顶(top),相应地,对栈首称为对栈底(bottom),对栈中间位置称为对栈间(mid)。 假设对栈S=(a1,a2,…,an),则称a1为对栈顶元素。对栈中的元素按a1,a2,…,an的次序进对栈,还可以是a1和an中间的任意一个元素。这个特性可以用图1表示。 2对栈的表示和实现 对栈和其它线性表一样有两种存储方式:顺序对栈和链式对栈。 2.1顺序对栈 顺序对栈占用一片连续的存储空间,它是利用一组地址连续的储存单元一次存放从对栈底到顶的所有元素。对栈顶用指针top指向的位置,指针bottom指向对栈底,mid指向对栈中间的任意位置,最初指向的元素与top一样,指向对栈顶元素。 2.1.1对栈的入对栈实现 元素可以在对栈顶、对栈间、对栈底插入,在插入相应元素前先修改相应的top、mid、Bottom的值,再将元素插入。 (1)对栈顶插入元素。对栈顶插入元素时,执行top=top+1后,将要插入的元素赋值给top所知的存储空间,同时,将top的值赋值给mid,保证在初始状态下top与mid保持一致,则对栈顶插入元素完成。 (2)对栈底部插入元素。对栈底插入元素是对栈间插入元素的一个特殊位置,下面将会介绍。 (3)对栈间插入元素。对栈间插入元素较为复杂,在每一次插入都要移动前面元素的位置,并且执行完后再将top的值赋值给mid,保证它们在初始状态下保持一致。具体操作如下:执行mid=mid+i(i为状态值,插入元素的位置);将前i-1项元素依次向前移动一个存储空间,将要出入的元素赋值给mid指向的存储单元,最后执行mid=top,保证mid与top指向对栈顶元素,则操作完成。 2.1.2对栈的删除实现 删除对栈中的元素有三种方式:对栈顶删除、对栈底删除和对栈间删除。 (1)对栈顶删除元素。对栈顶删除元素时对栈顶元素输出后将top减1。但是,由于对栈间指针bottom一开始和top指针同时指向对栈顶元素,所以在top减1之前将bottom指针减1,保证mid与top同时指向对栈顶元素。 (2)对栈底部删除元素。对栈底删除元素和队列删除元素一样都是将对栈底元素输出后将bottom加1。 (3)对栈间删除元素。对栈间删除元素较为复杂,在每一次删除或入对栈过程完成后,mid都将回归到对栈顶元素处,即和top指针相同。如果将要把第i个元素删除,则执行mid=mid+i,使mid指向要删除元素的地址空间。再对mid指向的元素进行相应的操作。这时候就应该将第i个元素后面的元素依次向前提一个位置,保证对栈占用的是一片连续的存储空间。执行完后判断是否继续执行,如果本次操作执行完后将mid重新指向对栈第一个元素,即mid=top,所以,每次操作完后,mid最终都要指向对栈顶元素。

文档评论(0)

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

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

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档