迴圈佇列的兩種寫法

2021-10-10 03:30:53 字數 1500 閱讀 7116

首先說一下主要思路:迴圈佇列的關鍵就是區別佇列滿和空的

兩個條件,因為是迴圈佇列,空和滿狀態會是相同的!至於迴圈方式可以採用乙個空閒單位的方式(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...