队列概念理解

1.队列的概念
只允许在一端插入数据操作,在另一端进行删除数据操作的特殊线性表;进行插入操作的一端称为队尾(入队列),进行删除操作的一端称为队头(出队列);队列具有先进先出(FIFO)的特性。可以想像一下排队时的情景

队头移动,出队列时队头向后移动一个位置

如果还有新元素进行入队列容易造成假溢出。

  • 假溢出:顺序队列因多次入队列和出队列操作后出现的尚有存储空间但不能进行入队列操作的溢出。
  • 真溢出:顺序队列的最大存储空间已经存满二又要求进行入队列操作所引起的溢出。

 

循环队列

如何区分队空和队满呢?

三种方式:1、设置一个标志

初始值 flag = 0;入队列:flag = 1; 出队列:flag = 0;
队列为空时:(front == rear && flag == 0)
队列为满时:(front == rear && flag == 1)

2、约定如果队列的尾指针指向的下一位置是头指针的位置时,约定为满。

若相等则认为队满(注意:rear所指的单元始终为空);也就是front==rear(空),front==(rear+1)%size(满);

3、是使用一个计数器记录队列中元素的总数(实际上是队列长度)。

题解:

设某循环队列Q的定义中有front和rear两个域变量其中,front指示队头元素的位置,rear指示队尾元素之后的位置,如下图所示。若该队列的容量为M,则其长度为(  )。

A. (Q.rear-Q.front +1)
B. [Q.rcar-a.front+M)
C. [Q.rear-Cl.front+1)%M
D.(Qrear-Q.front+M)%M

解:

为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列。这种循环队列可以以单链表的方式来在实际编程应用中来实现。

循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。

循环队列的理解

循环队列的理解

入队:入队时将新元素插入所指的位置,然后将加1。

 queue[rear]=x;

rear=(rear+1)%size;

循环队列的理解

出队:出队时,删去所指的元素,然后将加1并返回被删元素。

tmp=queue[front];

front==(front+1)%size;

循环队列的理解

队列长度(元素的个数):(rear-front+size)%size;

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值