版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011815404/article/details/88945380
【概述】
队列(Queue)是一种特殊的线性表,是只能在一端插入在另一端删除的特殊线性表。它按照先进先出的原则存储数据,先进入的数据被压入队首,最后的数据在队尾。
由于队列满足先进先出,后进后出的性质,因此也被称为先进先出表(FIFO)或后进后出表(LILO)
当队列中元素个数为零时称为空队列。
【逻辑结构】
队列是一种特殊的线性表,其允许插入(入队)的一端称为队尾(tail),允许删除(出队)的一端称为队首(head)。
当队列满时再插入元素,将发生上溢,当队列为空时删除元素,将发生下溢。
【队列的顺序存储结构】
队列可用数组来存储,数组的下界为队首位置,数组的上界为队尾位置,在队列的运算中需设置另两个指针:队首指针 head,指向队首元素的前一个位置;队尾指针 tail,指向队尾元素所在位置,两个指针初值设为 0,表示队列为空。
当队列经过一定的入队、出队操作后,队列的低端存在一部分的空闲空间,而队列的高端空间已被用尽,此时尽管数组中还有空间,但由于队列的入队操作只会插入到数组尾部,此时继续入队会发生假溢出
由于假溢出会造成极大的空间浪费,因此可以对其进行克服:
- 将队列中所有元素均向低地址区移动,但这样十分浪费时间
- 将存储队列的数组头尾相接,当存放到 n 地址后,下一个地址就翻转为 1
一般来说,队列的顺序存储结构常采用第二种方法,即循环队列
具体操作为对头指针、尾指针进行取模:
- rail=(rear+1) mod MAXSIZE
- head=(front+1) mod MAZSIZE