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

链队列 入队操作 Step1:申请建立一个新结点T; Step2:判别T是否为空;若空,表示队列已满; Step3:非空,将T插入链中,修改rear指针。 addqueue(Elemtype x) { QNODE *t; t = (QNODE*)malloc(sizeof(QNODE)); if ( t = = NULL) { printf(“ 内存无可用空间\n”); exit(1); } else { rear - next = t; rear = t; t -data = x; t -next = NULL ; } } 链队列 出队操作 判别队列是否为空;若空,则显示队列‘下溢’ 非空,则判别队长度是否为1; 为1,则修改头、尾指针; 不为1,修改头指针; 释放T。 delqueue( Elemtype e) { QNODE *t; if ( front = = rear) { printf(“链队列已空\n”); exit(1) ; } else { t = front-next; e = t- data ; front-next = t-next; if (t-next = = NULL ) rear = front; free(t); } return x; } 顺序队列和链队列的比较 顺序队列 固定的存储空间 方便访问队列内部元素 链式队列 可以满足队列大小无法估计的情况 访问队列内部元素不方便 队列的应用 只要满足先来先服务特性的应用均可采用队列作为其数据组织方式或中间数据结构。 调度或缓冲 消息缓冲器 邮件缓冲器 计算机的硬设备之间的通信也需要队列作为数据缓冲 操作系统的资源管理 宽度优先搜索 一个面试题 用两个栈实现一个队列 给定一个Stack类及其三个方法Push、Pop和Count,请用两个Stack实现Queue类及入队Enqueue和出队Dequeue方法。 1. 试比较栈和队列两种数据类型的异同点; 2. 对于输入数据依次为1、2、3的栈操作,试写出所有可能得到的输出序列。 习题 注意:从数据结构角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,是操作受限的线性表。 从数据类型的角度看,它们和线性表是不同的抽象数据类型 * 教材中给出的函数实现相对复杂,考虑了“栈空间不够时 逐段扩大” * 顺序存储的队列中,每次出队列的元素必定是队头元素,因此如果采取与普通顺序表同样的操作方式,则每次出队操作必然将整个队列向前移动,这使得效率大大降低。 引入两个指针,使得,在顺序存储的队列中,出队和入队操作都不移动元素而是移动指针。 入队和出队操作的执行步骤都是首先执行元素读写,在再进行指针移动 * 指针和队列元素之间的关系保持不变 * * * 表达式求值 后缀表达式求值 循环:依次顺序读入表达式的符号序列(假设以=作为输入序列的结束),并根据读入的元素符号逐一分析: 1. 当遇到的是一个操作数,则压入栈顶; 2. 当遇到的是一个运算符, 就从栈中两次取出栈顶,按照运算符对这两个操作数进行计算。然后将计算结果压入栈顶 如此继续,直到遇到结束符号, 这时栈顶值就是输入表达式的值 表达式求值 后缀表达式求值 待处理后缀表达式: 23 / 45 5 6 7 * + + + 34 栈状态的变化 1530 11 18 85 108 表达式求值 表达式求值的算法——算符优先算法 采用“算符优先法”,在表达式中,优先级的顺序是: 括号的优先级最高,对括号内的各种运算符有:先乘除、再加碱,同级运算从左至右。 先括号内,后括号外,多层括号,由内向外。 任何表达式都是由操作数、运算符和界符组成。 操作数可以是常量、变量、常数 运算符有算术运算符、关系运算符、逻辑运算符 界符包括左右括号算式结束符。 运算符和界符统称为“算符”。 表达式求值 表达式求值的算法——算符优先算法 在算符集中,在每一个运算步,相邻的算符c1 和c2之间的关系是如下三种情况(c1出现在c2之前): c1c2,c1的优先级低于c2 c1=c2,c1的优先级等于c2 c1c2,c1的优先级大于c2 表达式求值 表达式求值的算法——算符优先算

文档评论(0)

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

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

1亿VIP精品文档

相关文档