第3章--栈与队列.ppt

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

第3章栈与队列3.1栈3.2队列3.1栈3.1.1栈的概念与运算栈(stack)是一种操作受限的线性表,只允许在一端进行插入和删除操作。允许进行插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。栈的插入操作通常称为入栈或进栈(push),而栈的删除操作则称为出栈或退栈(pop)。当栈中无数据元素时,称为空栈。栈顶元素总是最后入栈的,因而是最先出栈;栈底元素总是最先入栈的,因而也是最后出栈。这种线性表是按照后进先出(LIFO,lastinfirstout)的原则组织数据的,因此,栈也被称为“后进先出”的线性表。2.栈的操作(1)InitStack(S)构造一个空栈S。(2)StackEmpty(S)栈的非空判断:若栈s不空,则返回TRUE;否则,返回FALSE。(3)StackFull(S)判断栈满:若S为满栈,则返回TRUE,否则返回FALSE。注意:该运算只适用于栈的顺序存储结构。(4)Push(S,x)进栈。若栈S不满,则将元素x压入S的栈顶,在顶部插入元素x。若栈满,则返回FALSE;否则,返回TRUE。(5)Pop(S)出栈:若栈s不空,则返回栈顶元素,并从栈顶中删除该元素;否则,返回空元素NULL。(6)GetTop(s)取栈顶元素值。若栈s不空,则返回栈顶元素的值;否则返回空元素NULL。该操作与Pop(S)不同,它只是获得栈顶元素的值,该元素仍在栈顶不会改变。而Pop(S)是将栈顶元素的值读出,该元素同时从栈中移除。3.1.2栈的存储方式由于栈也是线性表,因此和线性表一样,栈也有顺序栈和链栈两种存储结构,采用不同的存储结构,则实现栈的基本运算的算法也有所不同;在顺序栈中有“上溢”和“下溢”的概念。当顺序栈已满,继续向栈里压入数据,就会发生“上溢”。“上溢”也就是栈顶指针指出栈的外面,显然是出错了。反之,当栈中已空时,我们执行出栈操作,栈顶指针已经超出栈区的下界,这就是“下溢”。“下溢”本身可以表示栈为空栈,因此可以用它来作为控制转移的条件;链栈则没有上溢的限制,它就像一条一头固定的链子,可以在活动的一头自由地增加链环(结点)而不会溢出,链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要在头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。1.栈的顺序存储结构利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,这种形式的栈也称为顺序栈;设指针top指向栈顶元素的当前位置,以数组小下标的一端作为栈底,通常以top=-1时为空栈,在元素进栈时指针top不断地加1,当top等于数组的最大下标值时则栈满。用C语言定义的顺序存储结构的栈如下:#defineTURE1#defineFALSE0#defineMAXNUM100/*假定预分配的栈空间最多为100个元素*/typedefstruct{DataTypestack[MAXNUM];inttop;}seqstack注意:(1)顺序栈中元素用数组存放;(2)栈底位置是固定不变的,通常设置在数组中下标值小的一端;(3)栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示当前栈顶位置2.顺序栈的基本操作算法(1)栈的初始化intinitStack(seqstack*s){/*创建一个空栈由指针S指出*/s=(seqstack*)malloc(sizeof(seqstack));if(s==NULL)returnFALSE;s-top=-1;returnTRUE;}(2)入栈操作intpush(seqstack*s,DataTypex){/*将元素x插入到栈s中,作为s的新栈顶*/if(s-top=MAXNUM-1)returnFALSE;/*栈满*/s-top++;s-stack[s-top]=x;returnTRUE;}(3)出栈操作DataTypepop(seqstack*s){/*若栈s不为空,则删除栈顶元素*/DataTypex;if(s-top0)returnNULL;/*栈空*/x=s-stack[s-top];s-top--;returnx;}(4)取栈顶元素操作DataTypegettop(seqstack*s){/*若栈s不为空,则返回栈顶元素*/if(s-top0)returnNULL;/*栈空*/return(s-stack[s-t

文档评论(0)

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

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

1亿VIP精品文档

相关文档