数据结构-栈和队列.ppt

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

第3章栈和队列本章要点:栈和队列两种抽象数据类型的特点。栈用两种存储结构表示时的基本操作算法的实现。栈和队列的应用。线性表的操作允计在表的任何位置进行。本章介绍的两种特殊的线性表,是操作受限制的特殊线性表——栈(Stack)和队列(Queue),其特殊性在于限制了插入和删除等运算的位置。3.1栈栈是用来保存一些尚未处理而又等待处理的数据项这些数据项的处理是依据后进先出的规则。因此,经常把栈叫做后进先出线性表。栈在日常生活中几乎到处可见,如火车进库时,库的一端是堵死的,那么最后入库的火车必须先出来,否则前面的列车都被堵住,无法倒出。栈是这种事务的一种抽象。3.1.1栈的意义及抽象数据类型栈是将线性表的插入和删除运算限制为仅在表的一端进行的线性表。通常将表中允许进行插入、删除操作的一端称为栈顶(Top)。栈顶的当前位置是动态变化的,表的另一端称为栈底(Bottom)。当栈中没有元素时称为空栈。栈的插入操作被形象地称为进栈或入栈,删除操作称为出栈或退栈。不含元素的栈称为空栈。假设栈s=(a1,a2…,an),a1元素所在的位子称为栈底,an元素所在的位子称为栈顶,如图3.1所示。3.1.1栈的意义及抽象数据类型(续)进栈顺序是a1,a2…an,退栈的第一个元素是an,最后一个元素是a1是按“后进先出”的原则进行的,因此栈又称为后进先出(LastInFirstOut),缩写为(LIFO)的线性表。3.1.1栈的意义及抽象数据类型(续)栈的基本操作除了在栈顶进行插入或删除外,还有栈的初始化、清空及取栈顶元素等,下面给出栈的抽象数据类型定义:ADTstack{数据元素:可以是任意类型的数据,但必须属于同一个数据对象。数据关系:栈中数据元素之间是线性关系。基本操作:⑴InitStack(S):将S初始化为空栈。⑵ClearStack(S):栈S已经存在,将栈S置成空栈。⑶EmptyStack(S):栈S已经存在,判断若S为空,函数值返回TRUE,否则返FALSE。3.1.1栈的意义及抽象数据类型(续)⑷DestroyStack(S):栈S已经存在,销毁栈并释放空间。⑸Push(S,x):栈S已经存在,若S栈未满,将x插入S栈的栈顶位置,函数返回TRUE;若S栈已满,则返回FALSE,表示操作失败。⑹Pop(S,x):栈S已经存在,在栈S的顶部弹出栈顶元素,并用x带回该值;若栈为空,返回值为FALSE,表示操作失败,否则返回TRUE。⑺GetTop(S,x):栈S已经存在,取栈S的栈顶元素,其余不变。(8)Stacklenth(S)栈S已经存在,返回栈中元素个数。}ADTstack3.1.2栈操作的实现与线性表一样,栈的存储方式也有两种:顺序存储和链表存储方式。3.1.2.1栈的顺序存储结构栈的顺序存储结构即顺序栈是分配一块连续的存储区域依次存放自栈底到栈顶的数据元素,同时设指针top来动态地指示栈顶元素的当前位置。空栈top=0或top=-1表示。下面的顺序栈,采用的是top指向栈顶元素的后一个元素位置的方式来描述,当空栈时top=0。顺序栈的存储结构可以用C语言中的一维数组来表示。栈的顺序存储结构定义如下:3.1.2栈操作的实现(续)#defineStack-Size50typedefstruct{elemtypeelem[Stack-Size];/*存放栈元素的一维数组*/inttop;/*存放栈顶元素的下标*/}SeqStack;若s为SeqStack类型变量,则s.elem[0]存放栈中第一个元素,s.elem[s.top-1]为最后一个元素(栈顶元素)。当s.top=Stack-Size时为栈满,此时若再有元素入栈则将产生越界的错误,称为栈上溢(overflow),反之,top=0时为栈空,这时若执行出栈操作则产生下溢的错误(underflow)。图3.3表示了顺序栈中数据元素和栈顶指针之间的对应关系。3.1.2栈操作的实现(续)3.1.2栈操作的实现(续)顺序栈中几种操作算法的实现。⑴进栈/*在S栈中插入元素x,成功返回真失败返回假*/intPush(SeqStack*S,elemtypex){if(S-top==Stack-Size)return

文档评论(0)

优美的文学 + 关注
实名认证
内容提供者

优美的文学优美的文学优美的文学优美的文学优美的文学

1亿VIP精品文档

相关文档