佇列是一種基本的資料結構。我們平時排隊等候服務的時候,是先到的人先接受服務。對於佇列這種資料結構,實現的就是一種先進先出(first-int, first-out, fifo)的策略。
改變佇列中元素的操作方法只有兩個——push與pop。push是把元素從隊尾插入,pop是把元素從隊頭刪除。
佇列的陣列實現有兩種形式,一種是線性實現,另一種是迴圈實現。
線性實現有一定的侷限性,當rear抵達max-1的時候就不能再讓元素入隊了。此時front前面的空間將被浪費,因為沒有被使用。
來自《data structures and program design in c++》
著重說說迴圈實現。
迴圈實現就是把乙個陣列看成乙個迴圈的圓,當rear或front抵達max - 1的時候,再前進,將回到0處。這樣一來,就能對陣列的空間有充分的利用。
來自《data structures and program design in c++》
陣列實現佇列最大的問題在於,如何判斷其邊界,下面給出邊界情況
來自《data structures and program design in c++》
在實現的時候,需要區分如何判斷佇列已滿或者佇列已空。
當rear的下乙個位置是front的時候,則佇列已滿。
當rear和front的位置重疊,則佇列已空。
這樣就能避免圖中出現的邊界情況,難以判斷滿或空。
template class queue
public:
queue() : head(0), rear(0), queuesize(0)
// 下面所以求餘都是為了讓rear和front的範圍限定在[0, 10]
void push(const t &val)
} void pop()
} t front() const
t back() const
bool empty() const
int size() const
};
鍊錶實現利用兩個結點,head記錄煉表頭即隊頭,rear記錄鍊錶尾即隊尾
來自《data structures and program design in c++》
template class queue ;
private:
node *head;
node *rear;
int queuesize;
public:
queue() : head(null), rear(null), queuesize(0)
~queue()
void push(const t &val) else
++queuesize;
} void pop()
} t front() const
t back() const
bool empty() const
int size() const
};
《data structures and program design in c++》 佇列 鍊錶與迴圈陣列實現
如圖所示 根據圖可以知道 空的判斷條件 front 與 rear 都指向頭結點 實現 如下 struct node struct queuerecord typedef struct node ptrtonode typedef struct queuerecord queue struct nod...
佇列(陣列實現和鍊錶實現)
1.概念 具有一定操作約束的線性表 2.特點 1 只能在一端插入 入隊 另一端刪除 出隊 2 先進先出。3.儲存實現方式 陣列 鍊錶。4.基本操作 1.陣列實現 迴圈陣列 注意 1 普通的順序儲存的陣列用來實現佇列時,存在乙個問題 當rear 記錄隊尾的變數 到達maxsize 1時,不能確定佇列是...
佇列 佇列的陣列實現及鍊錶實現
stack 模板類的定義在標頭檔案中 include queueq q.push x 將x 接到佇列的末端。q.pop 彈出佇列的第乙個元素,注意,並不會返回被彈出元素的值。q.front 訪問最早被壓入佇列的元素,並不會彈出該元素。q.back 訪問最後被壓入佇列的元素,並不會 彈出該元素。q.e...