1 佇列的基本概念
佇列(queue):也是運算受限的線性表。是一種先進先出(first in first out ,簡稱fifo)的線性表。只允許在表的一端進行插入,而在另一端進行刪除。
隊首(front) :允許進行刪除的一端稱為隊首。
隊尾(rear) :允許進行插入的一端稱為隊尾。
例如:排隊購物。作業系統中的作業排隊。先進入佇列的成員總是先離開佇列。
佇列中沒有元素時稱為空佇列。在空佇列中依次加入元素a1, a2, …, an之後,a1是隊首元素,an是隊尾元素。顯然退出佇列的次序也只能是a1, a2, …, an ,即佇列的修改是依先進先出的原則進行的
adt queue
資料關係:r = 約定a1端為隊首,an端為隊尾。
基本操作:
create():建立乙個空佇列;
emptyque():若隊列為空,則返回true ,否則返回flase ;
⋯⋯insertque(x) :向隊尾插入元素x;
deleteque(x) :刪除隊首元素x;
} adt queue
在非空佇列裡,隊首指標始終指向隊頭元素,而隊尾指標始終指向隊尾元素的下一位置。
順序佇列中存在「假溢位」現象。因為在入隊和出隊操作中,頭、尾指標只增加不減小,致使被刪除元素的空間永遠無法重新利用。因此,儘管佇列中實際元素個數可能遠遠小於陣列大小,但可能由於尾指標巳超出向量空間的上界而不能做入隊操作。該現象稱為假溢位。
迴圈佇列:將為佇列分配的向量空間看成為乙個首尾相接的圓環,並稱這種隊列為迴圈佇列(circular queue)。
特點:
克服上述「假溢位」現象,充分利用向量空間
出隊、入隊操作,隊首、隊尾指標仍要加1,朝前移動
當隊首、隊尾指標指向向量上界(max_queue_size-1)時,其加1操作的結果是指向向量的下界0
2 入隊操作
status insert_cirqueue(sqqueue q , elemtype e)
/* 將資料元素e插入到迴圈佇列q的隊尾 */
2 入隊操作(正確)
status insert_cirqueue(sqqueue *q , elemtype e)
/* 將資料元素e插入到迴圈佇列q的隊尾 */
3 出隊操作
status delete_cirqueue(sqqueue q, elemtype *x )
/* 將迴圈佇列q的隊首元素出隊 */
3 出隊操作(正確)
status delete_cirqueue(sqqueue *q, elemtype *x )
/* 將迴圈佇列q的隊首元素出隊 */
資料結構 佇列 順序儲存結構佇列 鏈式儲存結構佇列
佇列是一種只允許在一端進行插入操作,而在另外一端進行刪除操作的線性表,特徵是先進先出,包括 順序儲存結 構佇列 鏈式儲存結構佇列。重點說明 迴圈佇列和鏈隊。在佇列中front為隊頭指標 rear為隊尾指標 佇列 佇列空的條件 rear front 佇列滿的條件 rear 1 queuesize fr...
資料結構 佇列1 順序儲存
linklist.h include include include define max size 1024 define true 1 define false 0 typedef struct queuelinklist queuelinklist 初始化 queuelinklist init...
資料結構 迴圈佇列的順序儲存結構
專案整體源 佇列是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出 first in first out 的線性表,簡稱fifo。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。線性表有順序儲存和鏈式儲存,棧是線性表,所以也有這兩種儲存方式。同樣,佇列作為一種特殊的線性表...