數據結構中的隊列(queue)是什么,它有什么應用場景?
一、數據結構中的隊列
介紹
隊列是一種特殊的線性表,特殊之處在于它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。隊列的數據元素又稱為隊列元素。在隊列中插入一個隊列元素稱為入隊,從隊列中刪除一個隊列元素稱為出隊。因為隊列只允許在一端插入,在另一端刪除,所以只有較早進入隊列的元素才能最先從隊列中刪除,故隊列又稱為先進先出(FIFO—first in first out)線性表。
應用
隊列的數組實現
隊列可以用數組Q[1…m]來存儲,數組的上界m即是隊列所容許的最大容量。在隊列的運算中需設兩個指針:head,隊頭指針,指向實際隊頭元素;tail,隊尾指針,指向實際隊尾元素的下一個位置。一般情況下,兩個指針的初值設為0,這時隊列為空,沒有元素。數組定義Q[1…10]。Q(i) i=3,4,5,6,7,8。頭指針head=2,尾指針tail=8。隊列中擁有的元素個數為:L=tail-head。現要讓排頭的元素出隊,則需將頭指針加1。即head=head+1這時頭指針向上移動一個位置,指向Q(3),表示Q(3)已出隊。如果想讓一個新元素入隊,則需尾指針向上移動一個位置。即tail=tail+1這時Q(9)入隊。當隊尾已經處理在最上面時,即tail=10,如果還要執行入隊操作,則要發生”上溢”,但實際上隊列中還有三個空位置,所以這種溢出稱為”假溢出”。
隊列的鏈表實現
在隊列的形成過程中,可以利用線性鏈表的原理,來生成一個隊列。
基于鏈表的隊列,要動態創建和刪除節點,效率較低,但是可以動態增長。
隊列采用的FIFO(first in first out),新元素(等待進入隊列的元素)總是被插入到鏈表的尾部,而讀取的時候總是從鏈表的頭部開始讀取。每次讀取一個元素,釋放一個元素。所謂的動態創建,動態釋放。因而也不存在溢出等問題。由于鏈表由結構體間接而成,遍歷也方便。
隊列的基本運算
(1)初始化隊列:Init_Queue(q) ,初始條件:隊q 不存在。操作結果:構造了一個空隊;
(2)入隊操作: In_Queue(q,x),初始條件: 隊q 存在。操作結果: 對已存在的隊列q,插入一個元素x 到隊尾,隊發生變化;
(3)出隊操作: Out_Queue(q,x),初始條件: 隊q 存在且非空,操作結果: 刪除隊首元素,并返回其值,隊發生變化;
(4)讀隊頭元素:Front_Queue(q,x),初始條件: 隊q 存在且非空,操作結果: 讀隊頭元素,并返回其值,隊不變;
(5)判隊空操作:Empty_Queue(q),初始條件: 隊q 存在,操作結果: 若q 為空隊則返回為1,否則返回為0。
延伸閱讀:
二、隊列的特點
先進先出 First In First Out(FIFO)
InitQueue(&Q):初始化隊列,構造一個空隊列Q。
DestroyQueue(&Q):銷毀隊列。銷毀并釋放隊列Q所占用的內存空間。
EnQueue(&Q,x):入隊,若隊列Q未滿,將x加入,使之成為新的隊尾。
DeQueue(&Q,&x):出隊,若隊列Q非空,刪除隊頭元素,并用x返回。
GetHead(Q,&x):讀隊頭元素,若隊列Q非空,則將隊頭元素賦值給x。
其他常用操作: QueueEmpty(Q):判隊列空,若隊列Q為空返回true,否則返回false。

猜你喜歡LIKE
相關推薦HOT
更多>>
分析型數據庫是什么,和關系型數據庫有什么區別?
一、分析型數據庫分析型是從數據庫的作用來劃分的,其重點用來做數據分析(OLAP),大量都是select語句。還有一種是專門用來做事務處理的,一般...詳情>>
2023-10-17 23:26:16
python self是什么意思,怎么使用?
一、python self介紹首先明確的是self只有在類的方法中才會有,獨立的函數或方法是不必帶有self的。self在定義類的方法時是必須有的,雖然在調...詳情>>
2023-10-17 21:24:11
創建Project提交到Github需要做什么?
一、創建Project提交到Github需要做什么1、在Github新建一個repository。2、打開編譯器,編輯最外面的.gitignore,如果沒有就新建一個這樣的文件...詳情>>
2023-10-17 20:23:50
C/S和B/S架構的工作原理及優缺點?
一、C/S架構的工作原理C/S 架構中客戶端和服務器之間通過網絡連接進行通信,客戶端發送請求后會等待服務器返回響應,直到收到響應后才能顯示給...詳情>>
2023-10-17 19:43:01熱門推薦
Web前端開發是什么技術?
沸分析型數據庫是什么,和關系型數據庫有什么區別?
熱對數量龐大的照片進行分類管理,較好的方便檢索的方法是什么?
熱web前端會用到哪些軟件工具?
新Flash動畫制作的原理是什么?
java/Python這么火,c++這么難,為什么我們還要選擇用C++?
app開發的制作為什么報價和開發周期都不一樣?
python self是什么意思,怎么使用?
什么是SEO?
PHP中的interface有什么用處?
創建Project提交到Github需要做什么?
為什么SwiftUI用struct來表示view?
C/S和B/S架構的工作原理及優缺點?
Flash為什么被淘汰了?
技術干貨






