队列的定义、表示、实现概要.pptVIP

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
队列的定义、表示、实现概要

* 例3:编写一个算法,利用栈和队列的基本运算将指定队列中的内容进行逆转。 分析:假设为循环队列。建立一个临时栈temps,将指定队列Q中的所有元素出队并入栈到temps中,这样队列Q为空,再将temps中的所有元素出栈并入队到Q队中,这样Q队列中的内容发生了逆转。算法如下: void reverse(SqQueue Q) { QElemType x; SqStack temps; InitStack(temps); * while( ! QueueEmpty (Q) ) //初始化temps栈 { DeQueue (Q, x); Push (temps, x); } While( ! StackEmpty (temps) ) { Pop (temps, x); EnQueue (Q, x); } } * 本章小结 线性表、栈、队的异同点: 相同点:逻辑结构相同,都是线性的;都可以用顺序存储或链式存储;栈和队列是两种特殊的线性表,即受限的线性表(只是对插入、删除运算加以限制)。 ① 运算规则不同: 线性表可任意存取; 栈是后进先出表LIFO; 队列是先进先出表FIFO。 ② 用途不同,线性表比较通用;堆栈用于函数调用、递归和简化设计等;队列用于离散事件模拟、OS作业调度和简化设计等。 不同点: * 3.1 栈(Stack) 3.2 队列 (Queue) 第三章 栈和队列 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式 * 3.2 队列 只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。 1. 定义 一、概念: 例如:队列 Q= (a1 , a2 , a3 , …, an ) 在队尾插入元素称为入队; 在队首删除元素称为出队。 队头元素 队尾元素 允许插入的一端为队尾,允许删除的一端为队头。 * 与线性表相同,仍为一对一关系。 顺序队或链队,以循环顺序队更常见。 只能在队首和队尾运算,且访问结点时依照先进先出(FIFO)的原则。 关键是掌握入队和出队操作,具体实现依顺序队或链队的不同而不同。 3. 存储结构: 4. 运算规则: 5. 实现方式 : 2. 逻辑结构: 队列 链队列:队列的链式表示和实现 循环队列:队列的顺序表示和实现 * (1)初始化队列 InitQueue(Q) (2)入队 EnQueue(Q,e) (3)出队 DeQueue(Q,e) (4)获取队头元素内容 GetHead(Q,e) (5)判断队列是否为空 QueueEmpty(Q) 二、基本操作: 建队列、判断队列是否为空、入队、出队、读队头元素值,等等。 * 链队列类型定义: typedef struct { QueuePtr front ; //队头指针 QueuePtr rear ; //队尾指针 } LinkQueue; 结点类型定义: typedef struct QNode { QElemType data; //元素 struct QNode *next; //指向下一结点的指针 } Qnode , * QueuePtr ; 关于整个链队的总体描述 链队中任一结点的结构 三、队列的表示和实现 1.单链队列 // -----队列的链式存储结构----- 和单链表唯一的区别是多了一个队尾指针 为什么要使用队首指针和队尾??? 如果固定队头,那么每次出队后,后面若干条数 据都会往前挪。增加了开销量和浪费。 为此,将买票窗口活动起来(即增加一个队首指针) ,出队后,后面的队列不需要移动。 队列可以看成: “很窄的单向胡同”。 “多台电脑共用一台打印机设备(优先级相等)” 头指针和尾指针避免了删除时的挪动。 * a1 ∧ an … Q.front Q.rear Q.front Q.rear ∧ 空队列 为了操作方便,添加一个头结点,令头指针指向头结点。 Q. front==Q. rear 队空的条件:Q.front = Q.rear;(有头结点) Q.front = NULL;(无头结点) * Status InitQueue (LinkQueue Q) { // 构造一个空队列

文档评论(0)

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

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

1亿VIP精品文档

相关文档