- 1、本文档共77页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构CH3_c
§3.6 队列的顺序存储结构及操作的虚拟实现 6、求队列长度 int queuelength(seqqueue q ) { return(q.rear-q.front+maxsize)% maxsize; } 时间复杂性:O(1) §3.7 队列的单链存储结构及操作的虚拟实现 一、队列的链式存储结构 1、存储方式:同一般线性表的单链式存储结构完全相 同。但是由于插入、删除在两端进行,需要两个指针 front、rear分别指向队列的两端。有两种不同的链法: … ... ^ front rear … ... ^ rear front 哪个好? §3.7 队列的单链存储结构及操作的虚拟实现 入队都很容易,但是出队差别很大!! 显然,应该用第1种链法。为了处理空队列,可以加上 头结点。 2、特点:没有假溢出,提高了空间利用率。 只有系统没有空间了,才回溢出; front rear … ... ^ §3.7 队列的单链存储结构及操作的虚拟实现 3、虚拟实现: 同线性表的单链式类似。 Struct link //定义单链表数据类型 { elemtype data; link *next;}; ? struct linkqueue //定义链队列数据类型 { link *front,*rear; //定义头指针和尾指针 }; §3.7 队列的单链存储结构及操作的虚拟实现 二、队列链式存储结构下各运算的虚拟实现 上节课内容回顾: 1、栈的应用之二——递归处理 递归的定义 递归的特点 递归与非递归 递归与递推 递归的执行过程(栈的应用) 2、队列 队列的逻辑结构、操作 队列ADT 队列的顺序存储:方式、特点、操作实现 队列的链式存储:方式、特点、操作实现 §3.8 几种特殊的队列 1、双端队列: 限定插入、删除在表的两端进行(每端都可以插入、删除) 2、输出受限的双端队列: 一个端点允许插入、删除,而另一端点只允许插入的双端队列。 3、输入受限的双端队列: 一个端点允许插入、删除,而另一端点只允许删除的双端队列。 §3.4 栈的应用举例 一、算符优先法算术表达式求值 读入字符 OPTR栈状态 OPND栈状态 ?1比较?2 执行的操作 w=‘2’ # -/ 30 w入OPND w=‘#’ # -/ 30 2 ?1=‘/’ 计算,结 ?2=‘#’ 果入OPND ?1?2 ?1出栈 w=‘#’ # - 15 ?1=‘-’ 计算,结 ?2=‘#’ 果入OPND ?1?2 ?1出栈 w=‘#’ # -15 ?1=‘#’ 结束,结 ?2=‘#’ 果在OPND ?1=?2 §3.4 栈的应用举例 一、算符优先法算术表达式求值 注:表达式有三种形式: 中缀形式,即我们平时
文档评论(0)