參考:資料結構與演算法分析 --c語言描述
佇列的實現有很多種,但是只要我們保證函式呼叫的效果相同那麼怎麼實現都無所謂。
佇列有兩個指標,頭指標front和尾指標rear。
使用陣列實現佇列的時候
可以讓front指向佇列的第乙個元素,rear指向佇列的最後乙個元素的下乙個位置;
也可以讓front指向第乙個位置的前乙個位置,rear指向最後乙個位置;
也可以讓front指向第乙個位置,rear指向最後乙個位置
使用前兩種方法可以使用front == rear確定佇列是否為空,第三種可以使用rear + 1 = front 的來確定隊列為空
從上面的圖可以看到,出隊時front向後移動,那麼前面空出的陣列空間就無法得到利用,所以我們要使rear指標可以回到陣列的開始位置。
我使用的front和rear指向是第三種。那麼當隊列為空時有front == (rear+1)%maxsize,隊列為滿時這個條件同時成立,怎麼判斷佇列的空,滿呢?
有三種方法:
新增變數size標識佇列的大小
使用tag標籤,當入隊時tag設定為1,出隊時設為0,所以隊滿時tag總是為1
在陣列中預留乙個空間,如果使用front指向第乙個位置,rear指向最後乙個位置,那麼隊空:front == (rear+1)%maxsize, 隊滿時front ==(rear+2)%maxsize。
針對第三種情況,當front指向第乙個位置,rear指向最後乙個位置的下乙個位置時,盜用網上的一張圖來理解:
本次使用迴圈佇列,front指向第乙個位置,rear指向最後乙個位置,通過size來判斷佇列的空滿。
queue.h
#ifndef queue_h_included
#define queue_h_included
typedef
int elementtype;
struct queuerecord;
typedef
struct queuerecord *queue;
intisempty
(queue q)
;int
isfull
(queue q)
;queue createqueue
(int maxelements)
;void
disposequeue
(queue q)
;//銷毀佇列
void
makeempty
(queue q)
;//使隊列為空
void
enqueue
(queue q,elementtype x)
;void
dequeue
(queue q)
;elementtype front
(queue q)
;//返回佇列的隊首元素
elementtype frontanddequeue
(queue q)
;//返回隊首元素並出隊
#endif
// queue_h_included
queue.c
#include
"..\fatal.h"
#include
"queue.h"
#include
#include
#define minqueuesize (5)
struct queuerecord
;int
isempty
(queue q)
intisfull
(queue q)
queue createqueue
(int maxelements)
void
makeempty
(queue q)
void
disposequeue
(queue q)
}static
intsucc
(int value, queue q)
void
enqueue
(queue q, elementtype x)
}elementtype front
(queue q)
void
dequeue
(queue q)
}elementtype frontanddequeue
(queue q)
return x;
}int
main()
陣列實現迴圈佇列 C 實現
file name aqueue.cpp function 陣列實現迴圈佇列 c 實現 陣列a 0 一端為head 1.當 head tail時為空 2.tail總指向 隊尾元素的下一位置 3.tail max head 1,也就是說,保留乙個元素空間 4.佇列最多有 max 1 個元素 5.當 t...
使用陣列實現佇列C
quad 使用陣列實現佇列,需要能夠實現插入 刪除元素,輸出當前佇列長度,當元素插入大於佇列當前設定長度時實現自動擴容 但是小於設定的最大佇列長度 等操作.陣列作為連續儲存空間,插入元素只需要按順序插入即可,當刪除元素時需要涉及陣列元素的移動。為實現以上操作需要定義兩個座標變數,queuehead指...
陣列實現的佇列
myqueue.h 說明 ntai的下乙個位置就是nhead的話,表示隊滿了,犧牲乙個空間 ntail nhead,表示隊為空 入隊的時候要判斷隊是否為滿,出隊的時候,要判斷是否為空。define size 1000 陣列大小 class cmyqueue myqueue.cpp include s...