一、什么是顺序队列?
队列的顺序储存结构:用数组存储队列,为了避免当只有一个元素时,队头和队尾重合使得处理变得麻烦,所以引入两个指针:front 指针指向队头元素,rear 指针指向队尾元素的下一个位置,当 front=rear 时,为空队列,结构如下图所示:
顺序队列的结构代码如下:
typedef int ElemType; /* ElemType类型根据实际情况而定,这里假设为int */
/* 循环队列的顺序存储结构 */
typedef struct
{
ElemType data[MAXSIZE];
int front; /* 头指针 */
int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */
}SeqQueue;
假设是长度为 5 的数组,初始状态,空队列如下图左所示,front 与 rear 指针均指向下标为 0 的位置。然后入队 a1、a2、a3、a4,front 指针依然指向下标为 0 位置,而 rear 指针指向下标为 4 的位置,如下图右所示:
出队 a1、a2,则 front 指针指向下标为 2 的位置,rear 不变,如下图左所示,再入队 a5,此时 front 指针不变,rear 指针移动到数组之外。数组之外, 那将是哪里?如下图右所示:
问题还不止于此。假设这个队列的总个数不超过5个,但目前如果接着入队的话,因数组末尾元素已经占用,再向后加,就会产生数组越界的错误,可实际上,我们的队列在下标为0和1的地方还是空闲的。我们把这种现象叫做 “假溢出"。
二、什么是顺序循环队列?
所以解决 "假溢出" 的办法就是后面满了,