一、基礎知識
1.佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
2.佇列是一種先進先出的線性表。
3.與棧相同,佇列也是一種重要的線性結構,實現乙個佇列同樣需要順序表或鍊錶作為基礎。
4.棧我們一般用順序表來實現,而佇列我們常用鍊錶來實現,簡稱為鏈佇列。
二、佇列的鏈式儲存結構
將隊頭指標front指向鏈佇列的
頭結點,隊尾指標rear指向終端結點。
空佇列時,隊頭指標front和隊尾指標rear都指向
頭結點。
typedef
char
elemtype
;
typedef
struct
qnode
//結點結構
qnode
;
typedef
struct
qnode
*queueptr
; //指向結點結構的指標
typedef
struct
//佇列的鍊錶結構
linkqueue
;
三、建立乙個佇列
step.1 在記憶體中生成乙個頭結點。
step.2 將佇列的頭指標和尾指標指向這個生成的頭結點。
//建立乙個佇列
void
initqueue
(linkqueue*q
)
q
->
front
->
next
=null
;
}
四、入佇列操作(尾部插入)
//入佇列操作
void
insertqueue
(linkqueue*q
,elemtype
e)
p
->
data =e
;
p
->
next
=null
;
q
->
rear
->
next =p
;
q
->
rear =p
;
}
五、出佇列操作(頭部刪除)
//出佇列操作
void
deletequeue
(linkqueue*q
,elemtype*e
)
p =q
->
front
->
next
;
*e
=p->
data
;
q
->
front
->
next =p
->
next
;
if(
q->
rear =p
) //原佇列只有乙個元素的情況,刪除該節點,隊列為空佇列
free(p
);
}
六、銷毀乙個佇列
由於鏈佇列建立在記憶體的動態區,因此當乙個佇列不再有用時,應該及時將他銷毀,以免過多的占用記憶體空間。
//銷毀乙個佇列
void
destoryqueue
(linkqueue*q
)
}
七、求佇列的長度
//求佇列長度
int
lenqueue
(linkqueue*q
)
return
len;
}
八、判斷佇列是否為空
//判斷佇列是否為空
bool
emptyqueue
(linkqueue*q
)
九、輸出佇列元素
//輸出佇列元素
void
disqueue
(linkqueue*q
)
printf
("\n"
);
}
十、獲取隊首、隊尾元素
//獲取隊首元素
elemtype
queuefront
(linkqueue*q
)
//獲取隊尾元素
elemtype
queuerear
(linkqueue*q
)
十一、建立乙個長度由自己決定的佇列並初始化佇列
//建立乙個長度由自己確定的佇列並初始化
void
createqueue
(linkqueue*q
)
scanf
("%c",&
d);
p
->
data =d
;
p
->
next
=null
;
q
->
rear
->
next =p
;
q
->
rear =p
;
}
}
資料結構 佇列
一 佇列的迴圈陣列實現。1 初始化 空佇列。令rear front 0。2 入佇列 約定rear指向佇列尾元素的下乙個位置。入佇列時,先判斷佇列是否已滿,而後將array rear x 然後rear 3 出佇列 約定front指向佇列的首元素位置。出佇列時,先判斷佇列是否為空,而後返回隊首元素re ...
資料結構 佇列
資料參考自 資料結構c 語言描述 佇列是一種先進先出的資料結構,這與棧正好相反。下例是簡單的queue實現 queue.h檔案 ifndef queue h define queue h include include 資料元素結構 自定義 struct datatype 佇列元素最大數 const...
資料結構 佇列
code for fun created by dream whui 2015 1 25 include stdafx.h include include using namespace std define true 1 define false 0 define ok 1 define erro...