資料結構與演算法 佇列 定義與操作

2021-10-06 14:39:31 字數 2280 閱讀 1529

/**

* 佇列複習**

* adt queue is

* operations

* queue createemptyqueue(void)

* 建立乙個空佇列

* int isemptyqueue(queue qu)

* 判斷佇列qu是否為空

* void enqueue(queue qu, datatype x)

* x進入隊尾

* void dequeue(queue qu)

* 頭元素出隊

* datatype frontqueue(queue qu)

* 求頭元素的值

* end adt queue

*/#include

#include

/** * 佇列定義

*/struct seqqueue

;typedef

struct seqqueue* pseqqueue;

/** * 順序佇列 建立空佇列

* @param size

* @return

*/pseqqueue createemptyqueue_seq

(int size)

printf

("元素陣列分配失敗\n");

}printf

("佇列建立失敗\n");

}/**

* 佇列 判斷是否為空

* @param paqu

* @return

*/int

isemptyqueue_seq

(pseqqueue paqu)

/** * 佇列 進隊操作,進入隊尾

* @param paqu

* @param x

*/void

enqueue_seq

(pseqqueue paqu,

int x)

paqu->qu[paqu->r]

= x;

//防止陣列越界

paqu->r =

(paqu->r +1)

%(paqu->maxnum)

;//如果最大為10,0+1=1 1%10 = 1;可以防止paqu->r指向被犧牲的最後乙個數字

}/**

* 佇列 隊首元素退出佇列

* @param paqu

*/void

dequeue_seq

(pseqqueue paqu)

//防止陣列越界

paqu->f =

(paqu->f +1)

%(paqu->maxnum);}

/** * 取得隊頭元素;

* @param paqu

* @return

*/int

frontqueue_seq

(pseqqueue paqu)

return paqu->qu[paqu->f];}

intmain()

;int test2[20]

=;pseqqueue paqu =

createemptyqueue_seq

(size)

;for

(int i=

0;i<

20;i++

)printf

("列印test1佇列:\n");

while(!

isemptyqueue_seq

(paqu)

)for

(int i=

0;i<

20;i++

)printf

("列印test2佇列:\n");

while(!

isemptyqueue_seq

(paqu)

)return0;

}

1.迴圈佇列採用了很好的辦法讓下標為 maxnum-1 元素的下個元素的下標是0。聽起來有點繞,但是利用取餘的操作,完美的實現了這一點。

若xr + 1) % maxnum == paqu->f

進隊操作移動r下標:paqu->r = (paqu->r + 1) % maxnum;

出隊:空隊判斷很簡單,主要是移動下標的操作。

paqu->f = (paqu->f + 1) % maxnum;

2.無論是否滿隊,只要清空佇列,下次開始都是paqu->r的下標。這也可以保證運用取餘判斷操作不會出錯。

資料結構與演算法 棧 定義與操作

include include 棧 複習 adt stack is operations 1.stack createemptystack void 建立空棧 2.int isemptystack void 判斷是否為空棧 3.void push stack st,datatype x 向棧st的棧...

資料結構與演算法 佇列

學習了好長 一段時間的資料結構,由於時間關係一直沒有寫部落格。這次打算將這段時間的學習內容寫下來做個整理。佇列作為線性結構的一種,其實用性不用多說。這裡總結下兩種結構的佇列實現。迴圈佇列 先列下以順序表結構形成的普通順序佇列存在的問題 隊頭不斷刪除元素,將使佇列的頭部空出單元 隨著刪除 插入的進行,...

資料結構與演算法 佇列

佇列 佇列與棧不同,它是一種先進先出的結構 實現 1 陣列 2 鍊錶 記錄的資料 1 隊首位置 第乙個元素的位置 2 隊尾位置 最後乙個元素的位置 3 佇列大小 size 佇列操作 entryqueue 入隊 exitqueue 出隊 isqueueempty 隊列為空 isqueuefull 佇列...