佇列的陣列實現 C

2021-09-20 13:32:24 字數 2520 閱讀 4308

參考:資料結構與演算法分析 --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...