首先說一下主要思路:迴圈佇列的關鍵就是區別佇列滿和空的
兩個條件,因為是迴圈佇列,空和滿狀態會是相同的!至於迴圈方式可以採用乙個空閒單位的方式(x+1)%maxsize,+1其實就浪費了maxsize-1索引儲存的資料。好了不多說看下寫法吧!
下面展示一下第一種寫法
。
第一種寫法,比較普遍,這就是空閒單位法
思路:留乙個空間作為區別佇列空和滿的判定
#include
#define maxsize 6
#define datatype int
typedef structsequeue;
void
initsequeue
(sequeue *q)
int enqueue
(sequeue *q,int x)
}int dequeue
(sequeue *q,int &x)
}int printsequeue
(sequeue *q)
}int main()
下面展示一下第二種寫法
。
第二種寫法,可以更好利用了第一種寫法浪費的空間,標記法。
思路:既然第一種寫法浪費了空間,那麼要利用第一種寫法浪費的空間,我們就可以利用
好第一種寫法的判斷佇列滿的判定條件q->front==(q->rear+1)%maxsize,說明q->rear+1
結尾前乙個的這個空間沒有用到,那麼我們就有乙個思路了,標記乙個flag,把這個空間
利用起來,讓判定條件認為這個地方是可以放入佇列成員的!判定完後,再設個條件作為
判定佇列已滿的條件flag=1,那麼就有了兩個區別佇列空和滿的條件了!重點:判斷為空的
條件是:flag==0&&q->front==q->rear 為滿的條件:flag==1
#include
#include
#define maxsize 6
#define datatype int
int flag =0;
//0表示佇列未滿,預設為0,1表示佇列已滿。
typedef structsequeue;
void
initsequeue
(sequeue *q)
int enqueue
(sequeue *q,int x)
if(q-
>front==
(q->rear+1)
%maxsize)
if(flag==0)
}int dequeue
(sequeue *q,int &x)
}int printsequeue
(sequeue *q)
flag=flag1;
//結束後flag設定原來狀態
}int main()
迴圈佇列的兩種實現方法
順序儲存結構 示意圖參考嚴蔚敏版 資料結構 順序儲存為何宜選迴圈佇列?佇列的順序表儲存中,除了資料域dat adata data 還應附設兩個座標fro ntfront front和rea rrear rear 用來記錄頭結點和尾結點的位置。對於pop poppo p操作,依靠 fro nt 1 f...
flume兩種寫法
1.全寫 bin flume ng agent conf conf name a1 conf file job flume netcat logger.conf dflume.root.logger info,console 2.簡寫 bin flume ng agent n a1 c conf f...
氣泡排序的兩種寫法
public static void main string args function1 a function2 a public static void function1 int a system.out.println system.out.println 第 i 1 次迴圈完成 syste...