演算法與資料結構 佇列

2021-08-22 10:08:45 字數 2649 閱讀 8521

adt queue

d=\d=

資料關係:r

=r=\,a_i∈d,i=2,3,...n\}

r=約定a

1a_1

a1​端為隊首,a

na_n

an​端為隊尾。

基本操作:

create():建立乙個空佇列;

emptyque():若隊列為空,則返回true,否則返回false;

……insertque(x):向隊尾插入元素x;

deleteque(x):刪除隊首元素x;

}adt queue

利用一組連續的儲存單元(一維陣列)依次存放從隊首到隊尾的各個元素,稱為順序佇列。型別定義如下:

#define max_queue_size 100 

typedef struct queue

sqqueue;

設立乙個隊首指標front,乙個隊尾指標rear,分別指向隊首和隊尾元素。

初始化:front=rear=0

入隊:將新元素插入rear所指的位置,然後rear加1

出隊:刪去front所指的元素,然後加1並返回被刪元素

隊列為空:front=rear

隊滿:rear=max_queue_size -1或front=rear

為充分利用向量空間,克服「假溢位」現象的方法是:將為佇列分配的向量空間看成為乙個首尾相接的圓環,並稱這種隊列為迴圈佇列(circular queue)。

在迴圈佇列中進行出隊、入隊操作時,隊首、隊尾指標仍要加1,朝前移動。只不過當隊首、隊尾指標指向向量上界(max_queue_size )時,其加1操作的結果是指向向量的下界0。

這種迴圈意義下的加1操作可以描述為:

$i=(i+1)%max_queue_size ;顯然

,為迴圈

佇列所分

配的空間

可以被充

分利用,

除非向量

空間真的

被佇列元

素全部佔

用,否則

不會上溢

。因此,

真正實用

的順序隊

列是迴圈

佇列。1

)rea

r所指的

單元始終

為空2)

迴圈佇列

為空:f

ront

=rea

r3)循

環佇列滿

:; 顯然,為迴圈佇列所分配的空間可以被充分利用,除非向量空間真的被佇列元素全部占用,否則不會上溢。 因此,真正實用的順序佇列是迴圈佇列。 1)rear所指的單元始終為空 2)迴圈隊列為空:front=rear 3)迴圈佇列滿:

;顯然,為循

環佇列所

分配的空

間可以被

充分利用

,除非向

量空間真

的被佇列

元素全部

占用,否

則不會上

溢。因此

,真正實

用的順序

佇列是循

環佇列。

1)re

ar所指

的單元始

終為空2

)迴圈隊

列為空:

fron

t=re

ar3)

迴圈佇列

滿:(rear+1)%max_queue_size=front $

sqqueue init_cirqueue(void)

status insert_cirqueue(sqqueue q,elemtype e)

/*將資料元素e插入到迴圈佇列q的隊尾*/

status delete_cirqueue(sqqueue q,elemtype *x)

/*將迴圈佇列q的隊首元素出隊*/

佇列的鏈式儲存結構簡稱為鏈佇列,它是限制僅在表頭進行刪除操作和表尾進行插入操作的單鏈表。

需要兩類不同的節點:資料元素節點,佇列的隊首指標和隊尾指標的節點。

/*資料元素節點型別的定義:*/

typedef struct qnode

qnode;

/*指標結點型別的定義:*/

typedef struct link_queue

link_queue;

linkqueue *init_linkqueue(void)

status insert_linkqueue(linkqueue *q,elemtype e)

/*將資料元素e插入到鏈佇列q的隊尾*/

status delete_linkqueue(linkqueue *q,elemtype *x)

/*將迴圈佇列q的隊首元素出隊*/

資料結構與演算法 佇列

學習了好長 一段時間的資料結構,由於時間關係一直沒有寫部落格。這次打算將這段時間的學習內容寫下來做個整理。佇列作為線性結構的一種,其實用性不用多說。這裡總結下兩種結構的佇列實現。迴圈佇列 先列下以順序表結構形成的普通順序佇列存在的問題 隊頭不斷刪除元素,將使佇列的頭部空出單元 隨著刪除 插入的進行,...

資料結構與演算法 佇列

佇列 佇列與棧不同,它是一種先進先出的結構 實現 1 陣列 2 鍊錶 記錄的資料 1 隊首位置 第乙個元素的位置 2 隊尾位置 最後乙個元素的位置 3 佇列大小 size 佇列操作 entryqueue 入隊 exitqueue 出隊 isqueueempty 隊列為空 isqueuefull 佇列...

資料結構與演算法(佇列)

引言 在上次複習棧的基本操作後,這一次我們來複習佇列的相關知識與操作。至此 我們開始資料結構佇列的學習。2.迴圈佇列 3.鏈式佇列 後記在棧的學習中,我們知道棧是一種只能在一端進行操作的資料結構。而佇列,是一種可以在兩端進行操作的資料結構,是先進先出的操作順序。定義 在一端進行插入操作,在另一端進行...