資料結構與演算法分析 迴圈佇列的陣列實現 C語言

2021-08-10 01:48:15 字數 1415 閱讀 3487

佇列,也是一種表,使用佇列的時候在表的末端隊尾插入元素,在表的開頭刪除元素,因為先插入的元素先被訪問,故佇列又稱為先進先出表,其基本操作為進隊與出隊,對應著插入與刪除,也要先進行相應的判空判滿

佇列可以用鍊錶實現,也可以用陣列實現,這裡用陣列實現,每乙個佇列都有fron和rear來指向隊頭和隊尾,我這裡實現的是迴圈佇列,值得注意的是何時為滿,何時為空,如果front與rear同時指向乙個位置為空,但是我們發現佇列滿的時候front與rear也同時指向同乙個位置,這是為什麼呢,舉個例子,乙個能儲存6個元素的佇列,佇列總共有0,1,2,3,4,5,6種狀態,而front與rear的差值只有0,1,2.,3,4,5種狀態,根本不可能用5種狀態來表示6種狀態,有兩種解決的方法,用乙個size變數來記錄佇列裡元素的多少。或者用乙個tag,刪除的時候標記為1,插入的時候標記為0,當front與rear相等時判斷即可。另外一種方法就是我們用n-1個空間,**用第二種方法實現

之前做pta上的題,有道題為deque雙端佇列,把棧 鍊錶 佇列的知識綜合在一起了,挺不錯的。

#include#includestruct queuerecord;

typedef struct queuerecord* queue;

typedef int elementtype;

struct queuerecord;

int isempty(queue q);

int isfull(queue q);

queue createqueue(int maxelements);

void disposequeue(queue q);

void makeempty(queue q);

void enqueue(elementtype x,queue q);

int dequeue(queue q);

//判斷是否為空佇列

int isempty(queue q)

//判斷佇列是否為滿佇列

int isfull(queue q)

//初始化乙個佇列

queue createqueue(int maxelements)

//讓隊列為空

void makeempty(queue q)

//刪除乙個佇列

void disposequeue(queue q)

}//向佇列末尾裡新增元素

void enqueue(elementtype x,queue q)else

}//刪除佇列頭部元素並返回

int dequeue(queue q)else

}int main(void)

if(isfull(q))

for(int i=1;i<=4;i++)

if(isempty(q))

return 0;

}

資料結構與演算法 佇列 迴圈佇列

部分內容來自於 資料結構 c語言版 清華大學出版社,嚴蔚敏 吳偉民 編著 如果我們將佇列設定為順序儲存結構,那麼,因為出隊的時候是從隊首出隊,入隊的時候是從隊尾入隊,而入隊需要在後面的記憶體中開闢空間,一直這樣總會把所有的記憶體耗盡.雖然我們在出隊的時候會釋放空間,但是釋放的空間是在靠前的記憶體位址...

資料結構與演算法 迴圈佇列

迴圈佇列 實際中我們還會用到一種佇列叫做迴圈佇列,這種佇列把儲存空間前後連線起來,形成像環一樣的結構,解決了記憶體空間浪費的問題 這裡我們用順序結構來實現,因為為了防止溢位的情況,這裡我們需要多開乙個資料的空間用作緩衝,這部分不用於存資料,用於防止溢位,當陣列訪問到這一部分時就將他歸零,實現迴圈的結...

資料結構與演算法 迴圈佇列鏈式佇列

佇列 1 也是一種操作受限的線性表,規定只能在一端插入,一端刪除,有先進先出的特點。2 順序佇列,隊首指標指向隊首元素,隊尾指標指向隊尾元素的前乙個元素,此時隊列為空的判定條件是 q.front q.rear 0 2 順序佇列會有假溢位的現象,為此設計了迴圈佇列。1 為了區分隊滿和隊空的條件,迴圈佇...