数据结构与算法 —— 队列

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

【队列的链式存储结构】

猜你喜欢

转载自blog.csdn.net/u011815404/article/details/88945380