版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
引入
众说周知,在队列的题目中,队头指针(front)和队尾指针(rear)有两种指示方法。
(1)队头指针
①指向队头元素
②指向队头元素元素的前一个位置
(2)队尾指针
①指向队尾元素
②指向队尾元素的后一个位置
指示方法不同元素入队和出队操作也不同,但是在做大部分题目的时候,我们并不需要分析队头指针和队尾指针具体操作,我们只要记住下面两个结论就行
结论
结论一:当队列执行元素入队操作时,队尾指针(rear)向后移,队头指针(front)不变
结论二:当队列执行元素出队操作时,队头指针(front)向后移,队尾指针(rear)不变
实战
例1
若用数组 A [ 0...5 ] A[0...5]A[0...5]来实现循环队列,且当前rear和front的值分别是1和5,当从队列中删除一个元素,再加入两个元素,rear和front指针的值分别为
根据结论一,队列中删除一个元素就是进行元素出队操作,所以front指针后移,rear指针不变,由于是循环队列所以front指针往后移值为0
根据结论二,队列中加入元素就是进行元素入队操作,所以rear指针后移,front指针不变,两次就是rear指针后移两步,1->2->3,所以rear指针值为3
例2
【2011统考真题】已知循环队列存储一维数组 A [ 0... n − 1 ] A[0...n-1]A[0...n−1]中,且队列非空时front和rear分别指向队头元素和队尾元素。若初始时队列为空,且要求第一个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是
我们假设元素已存入 A [ 0 ] A[0]A[0]中,那么根据题目,front和rear都为0,那么元素入队的时候只有rear指针后移,那么在存入元素之前的情况,我们把rear指针退回去,后退一步,由于是循环队列,所以0前面就是n-1,元素入队时front指针不变。
所以初始时front指向0,rear指向n-1
例3
【2014统考真题】循环队列放在一维数组 A [ 0... M − 1 ] A[0..