佇列是一種只允許在一段進行插入操作,在另一端進行刪除操作的線性表。嚴格來講就是比較特殊的線性表。
(1)佇列與棧的區別?
相同點:
1.都是線性結構。
2.插入操作都是限定在表尾進行。
3.都可以通過順序結構和鏈式結構實現。、
4.插入與刪除的時間複雜度都是o(1),在空間複雜度上兩者也一樣。
5.多鏈棧和多鏈佇列的管理模式可以相同。
不同點:
1.刪除資料元素的位置不同,棧的刪除操作在表尾進行,佇列的刪除操作在表頭進行。
2.應用場景不同;常見棧的應用場景包括括號問題的求解,表示式的轉換和求值,函式呼叫和遞迴實現,深度優先搜尋遍歷等;常見的佇列的應用場景包括計算機系統中各種資源的管理,訊息緩衝器的管理和廣度優先搜尋遍歷等。
3.順序棧能夠實現多棧空間共享,而順序佇列不能。
4.棧遵循先進後出,佇列遵循先進先出。
(2)佇列的基本函式?
初始化佇列:initqueue(q) ,初始條件:隊q 不存在。操作結果:構造了乙個空隊;
入隊操作: inqueue(q,x),初始條件: 隊q 存在。操作結果: 對已存在的佇列q,插入乙個元素x 到隊尾,隊發生變化;
出隊操作: outqueue(q,x),初始條件: 隊q 存在且非空,操作結果: 刪除隊首元素,並返回其值,隊發生變化;
讀隊頭元素:frontqueue(q,x),初始條件: 隊q 存在且非空,操作結果: 讀隊頭元素,並返回其值,隊不變;
判隊空操作:emptyqueue(q),初始條件: 隊q 存在,操作結果: 若q 為空隊則返回為1,否則返回為0。
(3)佇列有那兩種主要形式?
線性表有兩種主要形式,一是順序儲存,二是鏈式儲存。和棧一樣,佇列也有兩種儲存形式,佇列順序儲存和佇列鏈式儲存。
(4)佇列順序儲存的缺點有哪些?
1.隨著儲存資料的增加,記憶體可能會假溢位;
2.插入刪除資料複雜,每次都有移動大量資料。
(5)什麼是迴圈佇列?它有什麼特點?
迴圈佇列是對佇列順序儲存的一種補充。是一種首尾相連的順序儲存結構,為了解決普通佇列順序結構的假溢位問題。通過front和rear兩個指標表示首尾。但是因為如果首尾相連的話,佇列滿和佇列空的條件就一樣了,都是front == rear。所以要改為(rear+1)%queuesize==front。長度計算公式為(rear -front+queuesize)%queuesize。
(6)
什麼是鏈式佇列?它有什麼特點?
佇列的鏈式儲存結構就是線性表的單鏈表結構,但是多了乙個尾進頭出的原則。解決了順序佇列的假溢位的問題,不用首先申請確定空間,可以無限擴大。
(7)迴圈佇列和鏈式結構佇列各適合那些情況?
迴圈結構佇列因為有固定的長度,如果資料多大,就可能產生記憶體溢位,如果資料過少,則會導致記憶體資源的浪費。鏈式結構佇列則不存在這個問題,因為鍊錶的長度完全取決於你要新增的資料,但是節點頻繁插入和刪除會浪費一段時間。總的來說,如果你可以確定資料長度就使用迴圈列表,如果不能就採用鏈式佇列。
資料結構 佇列
一 佇列的迴圈陣列實現。1 初始化 空佇列。令rear front 0。2 入佇列 約定rear指向佇列尾元素的下乙個位置。入佇列時,先判斷佇列是否已滿,而後將array rear x 然後rear 3 出佇列 約定front指向佇列的首元素位置。出佇列時,先判斷佇列是否為空,而後返回隊首元素re ...
資料結構 佇列
資料參考自 資料結構c 語言描述 佇列是一種先進先出的資料結構,這與棧正好相反。下例是簡單的queue實現 queue.h檔案 ifndef queue h define queue h include include 資料元素結構 自定義 struct datatype 佇列元素最大數 const...
資料結構 佇列
code for fun created by dream whui 2015 1 25 include stdafx.h include include using namespace std define true 1 define false 0 define ok 1 define erro...