网站大量收购独家精品文档,联系QQ:2885784924

数据结构第3章b-12级.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第3章b-12级

第3章 栈与队列 第三章 栈与队列 3.1 栈 3.2 栈的应用举例 3.3 队列 3.4 队列的应用举例 队列的定义及基本运算 1、定义 ???  队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表 (1)允许删除的一端称为队头(Front)。   (2)允许插入的一端称为队尾(Rear)。   (3)当队列中没有元素时称为空队列。   (4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。 2、队列的基本逻辑运算 (1)SETNULL(Q); ???  置空队。构造一个空队列Q。 (2)EMPTY(Q); ???  判队空。若队列Q为空,则返回真值,否则返回假 (3)FRONT(Q); 若队列Q非空,则返回队头元素,但不改变队列Q的状态。 (4)EnQueue(Q,x) 若队列Q非满,则将元素x插入Q的队尾。此操作简称入队 (5)DEQUEUE(Q); ???  若队列Q非空,则删去Q的队头元素,并返回该元素。此操作简称出队。 顺序队列 1、顺序队列 ?(1)顺序队列的定义 ?  队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表。 (2) 顺序队列的表示   ①和顺序表一样,顺序队列用一个向量空间来存放当前队列中的元素。   ②由于队列的队头和队尾的位置是变化的,设置两个变量front和rear分别指示队头元素和队尾元素在向量空间中的位置,它们的初值在队列初始化时均应置为-1。 顺序队列的类型定义 typedef struct { datatype data[maxsize]; int front,rear; }sequeue; sequeue *sq; sq-rear 尾指针 sq-front 头指针 入队操作 sq-rear++; sq-data[sq-rear]=x; 出队操作 sq-front++; sq-rear sq-front 0 1 2 当前队列中元素个数(队列长度)是 (sq-rear)— (sq-front) 队空的条件是 (sq- front )==(sq- rear) 队满的条件是队列长度等于向量空间的大小 (sq-rear)—(sq-front)==maxsize (3)顺序队列中的溢出现象   ① “下溢”现象 ???  当队列为空时,做出队运算产生的溢出现象。“下溢”是正常现象,常用作程序控制转移的条件。   ② “真上溢”现象 ???  当队列满时,做入队运算产生空间溢出的现象。“真上溢”是一种出错状态,应设法避免。   ③ 假上溢现象   由于入队和出队操作中,头尾指针只增加不减小,致使被删元素的空间永远无法重新利用。当队列中实际的元素个数远远小于向量空间的规模时,也可能由于尾指针已超越向量空间的上界而不能做入队操作。该现象称为假上溢现象。 2、循环队列 ???  为充分利用向量空间,克服假上溢现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。 (1) 循环队列的基本操作 ???  循环队列中进行出队、入队操作时,头尾指针仍要加1,朝前移动。只不过当头尾指针指向向量上界(Maxsize-1)时,其加1操作的结果是指向向量的下界0。这种循环意义下的加1操作可以描述为: 入队时的队尾指针加1操作修改为: sq-rear=(sq-rear+1) % MAXSIZE; 出队时的队头指针加1操作修改为: sq-front=(sq-front+1) % MAXSIZE; front=4 rear=8 front=4 rear=4 front=8 rear=8 front=4 rear=3 (a) 有4个元素 (b) 队满 (c) 队空 (d) 队满 方法之一是附设一个存储队中元素个数的变量如num,当num==0时队空,当num==MAXSIZE时为队满。 另一种方法是少用一个元素空间,把图(d)所示的情况就视为队满,此时的状态是队尾指针加1就会从后面赶上队头指针,这种情况下队满的条件是: (sq-rear+1) % MAXSIZE== sq- front Length=(m+ (sq- rear)-(sq- front))%m (4) 循环队列的基本运算 ① 置队空 void SETNULL(sequeu

文档评论(0)

骨干 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档