初始化入隊
出隊取隊首
判斷是否為空
佇列與棧相似,採用先進先出的規則,就像排隊買票一樣
相對於棧,佇列的結構可能見的更多一些。
與棧一樣,c++的stl庫里其實也寫好了佇列這一結構,可以直接用
#include
#include
//stl中的佇列標頭檔案
using
namespace std;
queue<
int> q;
//宣告乙個int型的佇列
intmain()
while
(!q.
empty()
)return0;
}
stl中的佇列有如下常用的函式:
顧名思義,就是把佇列的首尾接起來,形成乙個迴圈的佇列。佇列依舊滿足先進先出的規則,只是多了乙個首尾相接的功能
佇列
#define maxsize 1000
struct queue
;
實際上,佇列就是換個法子用陣列,不採用原來直接呼叫的方法,而是用兩個新的下標:
把這三個東西放到一起,就組成了佇列的基本結構。其中陣列data
用來儲存資料,頭「指標」front
和尾「指標」rear
則以下標的形式呼叫陣列data
。
q.data[q.front]
;//隊首元素
q.data[q.rear]
;//隊尾元素
迴圈
迴圈主要通過maxsize
實現,maxsize
是佇列的長度。
與題解——舞伴問題中的思想一樣,採用對maxsize
取餘的方法,實現迴圈。在下文「入隊」部分中,會進行比較詳細的描述。
void
initqueue
(queue &q)
入隊的時候,用到尾指標rear
,需要將尾指標後移一位,然後存資料
如果佇列是迴圈的,也就是首尾相接,那就會有乙個銜接點,一邊的下標是0
,另一邊的下標是maxsize-1
。
那當q.rear++
的時候,如果rear
跨過了銜接點,如何表示?
要實現maxsize-1
直接跨到0
,可以使用取餘的方法,當rear=maxsize-1
的時候,如果它再+1
,我們寫:
q.rear=
(q.rear+1)
%maxsize;
這樣的話,+1
以後的rear
變成了maxsize
,取余得0
void
push
(queue &q,
int value)
後續**中的取餘思想與這一環節的基本一致,就不再重複說明。
void
pop(queue &q)
int
top(queue q)
一般情況下,棧和佇列中的empty
函式,都習慣於讓empty=1
代表空,讓empty=0
代表非空
bool
empty
(queue q)
資料結構與演算法 佇列
學習了好長 一段時間的資料結構,由於時間關係一直沒有寫部落格。這次打算將這段時間的學習內容寫下來做個整理。佇列作為線性結構的一種,其實用性不用多說。這裡總結下兩種結構的佇列實現。迴圈佇列 先列下以順序表結構形成的普通順序佇列存在的問題 隊頭不斷刪除元素,將使佇列的頭部空出單元 隨著刪除 插入的進行,...
資料結構與演算法 佇列
佇列 佇列與棧不同,它是一種先進先出的結構 實現 1 陣列 2 鍊錶 記錄的資料 1 隊首位置 第乙個元素的位置 2 隊尾位置 最後乙個元素的位置 3 佇列大小 size 佇列操作 entryqueue 入隊 exitqueue 出隊 isqueueempty 隊列為空 isqueuefull 佇列...
演算法與資料結構 佇列
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 delet...