第三章 栈和队列 ——队列的顺序表示和实现(6 )
利用一组连续的存储单元(一维数组) 依次存放从队首到队尾的各个元素,称为顺序队列。
对于队列,和顺序栈相类似,也有动态和静态之分。
本部分介绍的是静态顺序队列,其类型定义如下:
1 #define MAX_QUEUE_SIZE 100 2 typedef struct queue 3 { ElemType Queue_array[MAX_QUEUE_SIZE] ; 4 int front ; 5 int rear ; 6 }SqQueue;
二、队列的顺序存储结构
设立一个队首指针front ,一个队尾指针rear ,分别指向队首和队尾元素。
◆ 初始化:front=rear=0。
◆入队:将新元素插入rear所指的位置,然后rear加1。
◆ 出队:删去front所指的元素,然后加1并返回被删元素。
◆ 队列为空:front=rear。
◆ 队满:rear=MAX_QUEUE_SIZE-1或front=rear。
顺序队列中存在“假溢出”现象。因为在入队和出队操作中,头、尾指针只增加不减小,
致使被删除元素的空间永远无法重新利用。因此,尽管队列中实际元素个数可能远远小于数组大小,
但可能由于尾指针巳超出向量空间的上界而不能做入队操作。
该现象称为假溢出。如图3-6所示是数组大小为5的顺序队列中队首、队尾指针和队列中元素的变化情况。