(数据结构) 第四章 队列 -严军勇.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文档。上传文档
查看更多
* 第4章 队列 ● 本章要点  ● 队列的定义及基本运算  ● 队列的存储结构及运算实现  ●队列的应用举例 ● 本章难点 ● 循环队列、队列的链式存储结构及其运算的实现 ● 4.1 队列的定义和基本运算   在排队买东西时,通常要遵循:最先排队的人可以先买到东西出队。这种先进先出的规则应用在数据结构中称为队列。   队列是程序设计中经常用的一种数据结构,其逻辑结构是线性结构,存储结构有顺序存储和链式存储两种存储方法。   其操作特点和栈相反,队列只能在线性表的一端进行插入(入队),另一端进行删除(出队),和日常生活中的队列相似,因此队列又称为“先进先出”表(First In First Out,简称FIFO结构)。 ● 4.1.1 队列的定义   队列(Queue)是线性表的一种特殊情况,其所有的插入操作限定在表的一端进行,而所有的删除操作则限定在表的另一端进行。允许插入的一端叫做队尾(rear),允许删除的一端称为队头(front)。   队列的插入运算称为入队,删除运算称为出队。没有元素的队列称为空队列。第一个入队的元素也是第一个出队的元素。   设Q=(a1,a2,a3,…,an-1,an)队列结构,队头元素为a1,队尾元素为an,队列中元素是按照a1,a2,a3,…,an-1,an顺序进入的,退出队列也只能是这个次序。  a1 a2 a3 … an-1 an 出队 入队 ● 4.1.2 队列的基本运算   队列的基本操作除了入队(插入)和出队(删除)外,还有队列的初始化、判断队列是否为空、判断队列是否满及取队头元素等。 队列的抽象类型定义 ADT Queue{ Data={ai| ai∈Elemtype,i=1,2,…,n,n≥0} R1={(ai-1,ai)| ai-1,ai ∈Data, i=2,3, ,…,n,n≥0}   其中,an是队尾元素,a1是队头元素。 ● 4.1.2 队列的基本运算 ⑴ 队列初始化   ⑵ 入队列   ⑶ 出队列   ⑷ 取队头元素   ⑸ 队列空判断 ⑹ 销毁队列 (7) 清空队列 (8) 输出队列 (9) 返回队列的长度   ⒈ 顺序队列     队列的顺序存储结构称为顺序队列,是用一组连续的存储单元依次存放队列中的元素。在C语言中用一维数组来存放队列中的元素。因为队列的队头和队尾的位置是变化的,所以还需附设两个指针front和rear,front指针指向队列头元素的位置,rear指针指向队列尾元素的位置。约定front指针指向队列头元素所在位置的前一个位置,而rear指针指向实际队尾元素所在位置,当队列为空时,令Sq-front=Sq-rear=-1。 ● 4.1.3 队列的顺序存储结构 顺序队的类型定义 #define MAXSIZE 1024 typedef struct {Elemtype data[MAXSIZE]; int rear,front; }SeqQueue; 定义一个指向队列的指针变量 typedef SeqQueue *Sq; 0 1 Sq-rear 2 3 4 5 6 7 8 Sq-front a4 a5 a6 Sq-rear Sq-front a7 a8 a9 Sq-rear a1 a2 a3 Sq-rear ● 4.1.3 队列的顺序存储结构 Sq-front Sq-front front=rear=-1 空队 front=-1 rear=2 有3个元素 front=5 rear=8 假溢出现象 front=2 rear=5 一般情况 队列元素个数:m=(Sq-rear)-(Sq-front) 队满:m=MAXSIZE 队空:m=0 H G Q[7] Q[6] Q[5] Q[4] Q[3] Q[2] Q[1] Q[0] Sq-front=5 Sq-rear=7   由于入队的同时可能有些元素出队,队尾指针到最后,无法插入,但队列并不满,即队中元素个数少于MAXSIZE,这种现象称为假溢出。 ● 4.1.3 队列的顺序存储结构 ⒉ 循环队列     对于前面的假溢出问题,将顺序队列构造为一个环状的空间。称为循环队列。 D C B A Q[maxsize-1] Q[4] Q[3] Q[2] Q[1] Q[0] Sq-front=0 Sq-rear=4 maxsize-1 0 1 2 3 4 A B C D Sq-rear Sq-front ● 4.1.3 队列的顺序存储结构   构造成循环队列后,指针和队列元素的关系不变。在入队时,循环队列的尾指针 if(Sq-rear+1 =MAXSIZE) Sq-rear=0; else Sq-rear++; 运用“模运算” Sq-rear

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档