27.循环队列存储在数组A[0…m]中,则入队时的操作为( )。【中山大学 1999 一、6(1分)】
A. rear=rear+1 B. rear=(rear+1) mod (m-1)
C. rear=(rear+1) mod m D. rear=(rear+1)mod(m+1)
队列:像栈一样,队列也是一种线性表,它的特性是先进先出,插入在一端,删除在另一端。就像排队一样,刚来的人入队要排在队尾,每次出队的都是队首的人。
队列与栈一样,是一种线性存储结构,它具有如下特点:
- 队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构。
- 在队尾添加元素,在队头删除元素。
队列的顺序存储形式,可以用一段连续的空间存储数据元素,用两个整型变量记录队头和队尾元素的下标。

初始化:

入队:
(1)将队尾指向的位置赋值,并且赋值后将队尾的位置后移

(2)在入队时难免会出现以下情况

队列头删尾插,当尾指针到达末尾时就不能在插入元素,但是在队列中还有剩余的空间没有用,队列没有真正的满 ,(头部有元素删除出现空余,尾指针到达末尾)队列的空间未利用完,但是却造成了元素的溢出(又称"假溢出"),所以要利用循环队列,这样就不会有这样的顾虑
循环队列:
循环队列其实就是个数组,是靠队头、队尾、下标来实现头尾相接 如队列A有Maxsize个位置,当到达Maxsize-1时,判断到达队尾了,下标变道队头0,即可回到0——队列头部。

解决假溢出的方法:后面的满了,就从头在开始,形成头尾相接的循环,即循环队列。

- 循环队列通常用指针来实现队列的头尾相接。( )
17.循环队列也存在空间溢出问题。( )
入队操作:入队时将元素放入到rear指向的空间,同时rear指针向后移动一个单位。
rear = (rear + 1) mod Maxsize 也就是对 (rear+1) 取模
因为rear指针会一直增加到比队列容量大的数字,对其取模就是为了使其缩小,指向真正的位置例如 容量大小为5 队尾指向9 取模队尾指向的是4,说明队尾指正已经走过了一个圈
出队操作:

将头指针向着元素增长方向移动一个单元,原来的头指针指向的元素并没有真正的删除,只是逻辑上的删除,后序如果要用到这个空间,会用新的元素将其覆盖掉
front = (front + 1)mod Maxsize
取余的原因与入队一致。
28.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( )【浙江大学1999 四、1(4分)】
A. 1和 5 B. 2和4 C. 4和2 D. 5和1
31.最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是 ( )。
A. (rear+1) MOD n=front B. rear=front
C.rear+1=front D. (rear-l) MOD n=front
判断队列是否为空:

此时队尾指向的是循环队列的最后一个空间,这个空间并没有存放任何数据,判断队列是否为满只要将队尾指针+1,之后对值取模,看看其是否与队头相等。
例如队列空间大小为10,队尾指向第10个空间,下标为9,对其加1等于10,取模等于0,此时队头也是指向0的所以队满。
如果一开始队头指向的是1,队尾指向的是0,那么队尾加1,取模后为1,那么此时对也满
也就是front = (rear + 1) mod Maxsize
在循环队列中,当队列为空时,有front=rear,而当所有队列空间全占满时,也有front=rear。为了区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素。
循环队列的相关条件和公式:
1.队空条件:rear==front
2.队满条件:(rear+1) %Maxsize==front,其中Maxsize为循环队列的最大长度
3.计算队列长度:(rear-front+Maxsize)%Maxsize
4.入队:(rear+1)%Maxsize
5.出队:(front+1)%Maxsize
25.假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为( )。【北京工商大学 2001 一、2(3分)】
A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m D.(rear-front)%m
获取队列中的元素个数:
普通队列我们使用 队尾减去对头 就可以得到元素个数 但是循环队列队尾减去对头可能会出现负数,所以需要加上容量大小后取模,这样才会得到真实的容量大小
例如队列大小6,队尾指向1,队头指向2,那么元素个数为(1-2+6)%6=5个
例如队列大小6,队尾指向5,队头指向0,那么元素个数为(5-0+6)%6=5个
- 栈和队列的共同点是( )。【燕山大学 2001 一、1(2分)】
A. 都是先进先出 B. 都是先进后出
C. 只允许在端点处插入和删除元素 D. 没有共同点
栈又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底,他是先进后出的。
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头,他是先进先出的。