佇列的實現與運用(設計迴圈佇列)

2021-10-02 18:49:32 字數 3173 閱讀 1928

佇列是只允許在一端進行插入資料操作,在另一端進行刪除資料操作的特殊線性表,佇列具有先進先出

fifo(first in first out)

入佇列:進行插入操作的一端稱為隊尾

出佇列:進行刪除操作的一端稱為隊頭

佇列可以陣列和鍊錶的結構實現,使用鍊錶的結構實現好一些,因為如果使用陣列的結構,出佇列在陣列頭上出資料,效率會比較低

此處我們使用鍊錶實現乙個支援動態增長的棧

#include

#include

#include

typedef int datatype;

typedef struct queuenode

queuenode;

typedef struct queue

queue;

void

queueinit

(queue* q)

;//初始化

void

queuedestroy

(queue* q)

;//銷毀

void

queuepush

(queue* q, datatype x)

;//插入

void

queuepop

(queue* q)

;//刪除

datatype queuefront

(queue* q)

;//返回隊頭元素

datatype queueback

(queue* q)

;//返回隊尾元素

int queueempty

(queue* q)

;//判空

int queuesize

(queue* q)

;//計算長度

void

queueprint

(queue* q)

;//輸出

#include "queue.h"

//佇列

void

queueinit

(queue* q)

//初始化

void

queuedestroy

(queue* q)

//銷毀

q->_front = q-

>_rear =

null;}

void

queuepush

(queue* q, datatype x)

//插入

else

}void

queuepop

(queue* q)

//刪除

}datatype queuefront

(queue* q)

//返回隊頭元素

datatype queueback

(queue* q)

//返回隊尾元素

int queueempty

(queue* q)

//判空

int queuesize

(queue* q)

//計算長度

return n;

}void

queueprint

(queue* q)

//輸出

printf

("\n");

}void

test()

int main()

迴圈佇列是一種線性資料結構,其操作表現基於先進先出原則,並且隊尾被連線在隊首之後以形成乙個迴圈,即環形緩衝器

迴圈佇列的關鍵在於模擬迴圈,處理陣列邊界

typedef struct  mycircularqueue;

mycircularqueue*

mycircularqueuecreate

(int k)

//設定隊長k

bool mycircularqueueisempty

(mycircularqueue* obj)

//判空

return

false;}

bool mycircularqueueisfull

(mycircularqueue* obj)

//判滿

return

false;}

bool mycircularqueueenqueue

(mycircularqueue* obj, int value)

//插入

obj -

> data[obj -

> tail]

= value;

//first in

obj -

> tail =

(obj -

> tail +1)

%(obj -

> cap)

;//索引 + 1,並且要注意取模計算,實現迴圈佇列

return

true;}

bool mycircularqueuedequeue

(mycircularqueue* obj)

//刪除

obj -

> head =

(obj -

> head +1)

%(obj -

> cap)

;return

true;}

int mycircularqueuefront

(mycircularqueue* obj)

// 從隊首獲取元素

else

}int mycircularqueuerear

(mycircularqueue* obj)

// 從隊尾獲取元素

return obj -

> data[

(obj-

> tail -

1+ obj -

> cap)

%(obj -

> cap)];

//注意處理

}void

mycircularqueuefree

(mycircularqueue* obj)

//銷毀

佇列的操作與實現 迴圈佇列

由於順序佇列有 假溢位 的缺點,所以在應用中,運用更多的是迴圈佇列來實現佇列的順序儲存。由於引用傳引數,所以原始檔需要.cpp字尾,即c 檔案儲存。迴圈佇列的判空條件為 q.rear q.fornt 迴圈佇列的判讀隊滿的條件是 q.rear 1 maxsize q.fornt 下面是佇列實現的儲存型...

佇列 迴圈佇列的實現

為了可以重新利用佇列底層陣列中已刪除元素所佔的空間,消除可能出現的 假滿 現象,將順序佇列改進為迴圈佇列。迴圈佇列是首尾相連的佇列 當front rear變數達到底層陣列的capacity 1之後,再向前以為就變成0.入隊 1 判斷佇列是否已滿,已滿丟擲越界異常 2 不滿的話把元素查到隊尾,並且re...

迴圈佇列 622 設計迴圈佇列

設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為環形緩衝器。迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是使用...