利用一组连续的存储单元(一维数组) 依次存放从队首到队尾的各个元素,称为顺序队列。

对于队列,和顺序栈相类似,也有动态和静态之分。

本部分介绍的是静态顺序队列,其类型定义如下:

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的顺序队列中队首、队尾指针和队列中元素的变化情况。