理论基础 —— 队列
【概述】
隊列(Queue)是一種特殊的線性表,是只能在一端插入在另一端刪除的特殊線性表。它按照先進先出的原則存儲數據,先進入的數據被壓入隊首,最后的數據在隊尾。
由于隊列滿足先進先出,后進后出的性質,因此也被稱為先進先出表(FIFO)或后進后出表(LILO)
當隊列中元素個數為零時稱為空隊列。
【邏輯結構】
隊列是一種特殊的線性表,其允許插入(入隊)的一端稱為隊尾(tail),允許刪除(出隊)的一端稱為隊首(head)。?
當隊列滿時再插入元素,將發生上溢,當隊列為空時刪除元素,將發生下溢。
【隊列的順序存儲結構】
隊列可用數組來存儲,數組的下界為隊首位置,數組的上界為隊尾位置,在隊列的運算中需設置另兩個指針:隊首指針 head,指向隊首元素的前一個位置;隊尾指針 tail,指向隊尾元素所在位置,兩個指針初值設為 0,表示隊列為空。
當隊列經過一定的入隊、出隊操作后,隊列的低端存在一部分的空閑空間,而隊列的高端空間已被用盡,此時盡管數組中還有空間,但由于隊列的入隊操作只會插入到數組尾部,此時繼續入隊會發生假溢出
由于假溢出會造成極大的空間浪費,因此可以對其進行克服:
- 將隊列中所有元素均向低地址區移動,但這樣十分浪費時間
- 將存儲隊列的數組頭尾相接,當存放到 n 地址后,下一個地址就翻轉為 1
一般來說,隊列的順序存儲結構常采用第二種方法,即循環隊列
具體操作為對頭指針、尾指針進行取模:
- rail=(rear+1) mod MAXSIZE
- head=(front+1) mod MAZSIZE
【隊列的鏈式存儲結構】
隊列的鏈接存儲結構為鏈隊列,其利用單鏈表來實現隊列的鏈式存儲,隊首指針即為鏈表的頭指針。
由于其空間是動態擴展的,因此一般不存在上溢的問題,只有當內存沒有可用空間時才會出現隊列滿,但每個元素都需要一個指針域,從而產生了結構性開銷。
【實現】
總結
以上是生活随笔為你收集整理的理论基础 —— 队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第K个幸运排列 (51Nod-1635)
- 下一篇: 概率论 —— 数学期望