网站大量收购闲置独家精品文档,联系QQ:2885784924

沈阳工业大学信息科学与工程学院数据结构课件 第3章.ppt

沈阳工业大学信息科学与工程学院数据结构课件 第3章.ppt

  1. 1、本文档共81页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 栈和队列 栈和队列都是线性表,但从操作方式,它们与线性表有很多不同。对于栈来说,插入和删除运算均是对栈的尾部进行的,而对于对列来说,插入在队列的头部进行,删除在队列的尾部进行。 3.1 栈 3.1.1 栈的定义 栈(stack)是线性表的特例,它是一种限定仅在表尾进行插入和删除的线性表。对栈来说,允许进行插入和删除的一端,称为栈顶(top);不允许插入和删除的另一端则称为栈底(bottom)。 栈底元素是最先插入(进栈)的元素,又是最后一个被删除(退栈)的元素; 栈顶元素是最后插入(进栈)的元素,又是最先 被删除(退栈)的元素。也就是说,退栈时,最后进栈的元素最先出栈,最先进栈的元素最后出栈。 由此可见,栈的操作是按“后进先出”的原则 进行的 例. 假定有n个元素1,2,…,n,它们按1,2,…,n的次序进栈,i进栈时,1~(i-1)都已进过栈,其中某些元素也可以已经按规则出了栈。每种元素只允许进一次栈。而出栈无具体规定(即可随时出栈),每个元素位于栈顶时就可以出栈了。这样,当n个元素完全进出栈后,出栈次序一定是这n个元素的一个排列。全排列共有n!种,在这n!种全排列中,哪些是可能的出栈次序? 哪些是不可能的出栈次序? n=3时,全排列有3!=6种,其中可能的出栈次序是: 1 2 3:1进→1出→2进→2出→3进→3出 1 3 2:l进→1出→2进→3进→3出→2出 2 1 3:1进→2进→2出→1出→3进→3出 2 3 1:1进→2进→2出→3进→3出→l出 3 2 1:1进→2进→3进→3出→2出→1出 不可能的次序是:3 1 2。 从n=3时可以看出,在可能的出栈序列中,对任意元素,若它后面有小于它的元素,则这些小于它的元素必须以“逆序”出现, 这是由栈的“后进先出”的特性决定的。例如,n=4时,1 4 2 3就是不可能的出栈序列,因为4后面的23是顺序排列。对于一般的n,可以设计一个算法,找出所有的可能出栈次序和不可能出栈次序。 一. 选择题 1.栈的插入和删除操作在( )进行。 A.栈顶 B.栈底 C.任意位置 D.指定位置 8.一个栈的输入序列为1,2,3,4,5则下列序列中不可能是栈的输出序列的是__________ A)2,3,4,1,5 B)5,4,1,3,2 C)2,3,1,4,5 D)1,5,4,3,2 三.运算题 1.有6个元素1,2,3, 4,5,6依次进栈,允许任何时候出栈,能否得到下列的每个出栈序列,若能,给出栈操作的过程,若不能,简述其理由。 (1)3,4,2,5,6,1(2)1,2,5,4,6,3(3)4,3,5,1,2,6(4)2,1,5,6,3,4 2. 有四个元素a,b,c,d依次进栈,任何时候都可以出栈,写出所有可能的出栈序列。 栈是一种特殊的线性表, 与线性表类似, 栈的表示方式也有两种: (1)顺序存储表示 常以一个固定大小的数组来表示栈,它的优点就是以任何语言处理都相当方便;不利之处就是数组的大小是固定的,而栈本身是变动的。如果进出栈的数据量无法确定,就很难确定数组的大小,如果数组太大就容易造成内存资源浪费,数组太小就会造成栈不够使用。 (2)动态的链表表示 使用链表的结构来表示栈,可随时改变链表的长度,可以有效地利用内存资源,但缺点是处理起来比较复杂。 3.1.2 栈的顺序存储结构 栈的顺序存储结构简称顺序栈,是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。由于C++语言中数组的下标从0开始,因此用top=-1表示栈空,其初值指向栈底,每当插入新的栈顶元素时,指针top的值增1,而每当删除栈顶元素时,指针top的值减1。图3-2 顺序栈的C++类定义如下: templateclass Type class SeqStack { private: int top; Type ﹡stack;//用数组存储栈中元素 int maxSize; public: SeqStack (int size); ~SeqStack(){delere [ ] stack;} void push (const Type item); Type pop(void); Type getTop(); int empty(v

文档评论(0)

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

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

1亿VIP精品文档

相关文档