一个关于队列的数据结构题? 己知循环队列存储在一维数组A[O…n-1]中
己知循环队列存储在一维数组A[O…n-1]中,且队列非空时front和rear分别指向队头元素和队尾元索。若初始时队列为空,且要求第1个进入队列的元素存储在A[0]处,则初始时front和rear的值分别为:
网络的版本都是front=0,rear=n-1。但是我觉得不对,我的分析是这样的:首先初始队列为空,那么可知front=rear;然后要求第1个进入队列的元素存储在A[0]处,那么就要求rear=n-1。从而我们可以得到front=rear=n-1 展开
网络版本是对的。
你没理解“队列非空时front和rear分别指向队头元素和队尾元索”,根据这句话当队列只有一个元素时,front==rear;当队为空时,front == (rear + 1)%n;
进队的操作为:
rear = (rear + 1) % n ;
Queue[rear] = elem ;
元素正好在下标为0的位置,此时front == rear == 0。
“队列非空时front和rear分别指向队头元素和队尾元索”意思就是front和rear都是“实指”,而你的理解中front是“虚指”,不同教材采用的方法不一样,一般题目中会说明
2021-04-20
重点是“队列非空时front和rear分别指向队头元素和队尾元索”,我们知道队头和队尾里面肯定有数字,所以这句话通俗来说就是:在队列非空时front和rear要指向有数字的地方;
要是front=rear=n-1,那么入队一个元素1之后,我们都知道入队只会让rear变动,所以rear指向0了(里面存储了1),但是front还是指向n-1,这是一个没有数字的区域,不满足“队列非空时front和rear分别指向队头元素和队尾元索”这句话,也就是不满足front和rear要指向有数字的地方,所以初始时front只能是在0那个位置上;
又根据“且要求第1个进入队列的元素存储在A[0]处”要满足这个条件,rear初始应该指向n-1;
所以结果:初始时front值为0,rear值为n-1