adt queued=\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.鏈式佇列 後記在棧的學習中,我們知道棧是一種只能在一端進行操作的資料結構。而佇列,是一種可以在兩端進行操作的資料結構,是先進先出的操作順序。定義 在一端進行插入操作,在另一端進行...