資料結構 佇列靜態順序儲存結構

2021-07-02 03:19:09 字數 1463 閱讀 1675

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。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。線性表有順序儲存和鏈式儲存,棧是線性表,所以也有這兩種儲存方式。同樣,佇列作為一種特殊的線性表...