第03章栈与队列.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文档。上传文档
查看更多
第03章栈与队列

第三章 栈与队列 栈的定义 栈是只允许在表尾进行插入或删除操作的线性表。 表尾端称为栈顶,表头端称为栈底。 不含元素的栈称为空栈。 栈是先进后出的线性表。 栈的基本操作 Push(S, e):进栈/入栈 Pop(S, e):出栈/弹栈 GetTop(S, e):取栈顶元素 StackEmpty (S):判断栈空 StackLength(S):返回栈的长度 练习: 入栈序列为1 2 3 4 5,设用P表示Push,用Q表示Pop。 问题:操作序列PPQPQQPPQQ的出栈序列是? 练习: 入栈序列为1 2 3 4 5,设用P表示Push,用Q表示Pop。 问题:得到出栈序列3 5 4 2 1的操作序列是? 练习: 入栈序列为1 2 3 4 5,设用P表示Push,用Q表示Pop。 问题:得到出栈序列4 3 1 2 5的操作序列是? 问题:对给定的入栈序列1 2 3 … n,什么样的出栈序列是得不到的? 出栈序列可以看作是1…n的一个排列,设为:p1p2p3…pn,若存在ijk,使得: pkpipj,则该序列不能通过栈操作得到。 行编辑程序 在编辑程序中,设立一个输入缓冲区,用于接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入错误,并在发现有误时可以及时更正。 表达式计算问题 以+、-、*、/、(、) 、#为例,优先级表如下所示: 表达式计算问题 递归 函数直接或间接调用自身 当问题可以被分解为同类型的、规模更小的子问题时,可递归求解子问题,再由子问题的解得到原问题的解。 例:设计程序,计算下式。 汉诺塔问题 汉诺塔问题 问题的形式 递归规则 终结条件 函数调用的工作机制 E1: 参数入栈 E2: 返回地址入栈 E3: 跳转到函数入口,开始执行函数 E4: 函数结束时,从栈中弹出返回地址 E5: 返回调用点并清空栈中的参数 队列的定义 队列是在一端进行插入(入队)操作,另一端进行删除(出队)操作的线性表。 队列的链式表示和实现—— 链队列 顺序结构实现的队列——循环队列 练 习 1. 一个栈的入栈序列是a,b,c,d,e,则不可能的输出序列是( ) A.edcba B. decba C. dceab D. abcde 练 习 ADT Queue { 数据对象: D={ai | ai∈ElemSet, i=1,2,...,n, n≥0} 数据关系: R1={ a i-1,ai | ai-1, ai ∈D, i=2,...,n} 约定其中a1 端为队列头, an 端为队列尾 基本操作: …… }ADT Queue 3.4 队列 InitQueue(Q) DestroyQueue(Q) QueueEmpty(Q) QueueLength(Q) GetHead(Q, e) ClearQueue(Q) DeQueue(Q, e) EnQueue(Q, e) 3.4 队列 队列的定义 双端队列:限定插入和删除操作在表的两端进行的线性表。 3.4 队列 A B C D E F 端1 端2 受限的双端队列: 队头/读出端 队尾/写入端 3.4 队列 //结点类型定义 typedef struct QNode { QelemType data; Struct QNode *next; }QNode,*QueuePtr; //链队列类型定义 typedef struct { QueuePtr front; //队头指针 QueuePtr rear; //队尾指针 }LinkQueue; Q.front Q.rear ^ 空链队列 Q.front Q.rear x y ^ 非空链队列   Q.front Q.rear 初始化空队列:Q.front=Q.rear 队列的顺序表示和实现—— 顺序队列 3.4 队列 J1  Q.front 入队列:Q.rear++(尾指针增1) Q.rear 队列的顺序表示和实现—— 顺序队列 3.4 队列 J2 J1 Q.front Q.rear 入队列:Q.rear++(尾指针增1) 队列的顺序表示和实现—— 顺序队列 3.4 队列 J3 J2 J1 Q.front Q.rear 入队列:Q.rear++(尾指针增1) 队列的顺序表示和实现—— 顺序队列 3.4 队列 J3 J2 Q.front Q.rear 出队列:Q.front++(头指针增1) 队列的顺序表示和实现—— 顺序队列 3.4 队列 J3 Q.front Q.re

文档评论(0)

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

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

1亿VIP精品文档

相关文档