佇列 基於迴圈陣列的實現

2022-05-19 06:56:38 字數 2392 閱讀 8744

description

請完成以下佇列類的實現:(請注意陣列實現應該為迴圈陣列)

enum errorcode

success,

underflow,

overflow

const int maxqueue = 100;

template

class myqueue

public:

myqueue();

bool empty() const;// 判斷佇列是否為空

errorcode serve();// 出隊操作

errorcode retrieve(queueentry &item) const;// 獲取隊頭元素

bool full() const;

// 判斷佇列是否已滿

int size() const;

// 獲取佇列已有元素個數

void clear();// 清除佇列所有元素

errorcode retrieve_and_serve(queueentry &item);// 獲取隊頭元素並出隊

private:

int front;                             // 隊頭下標

int rear;                              // 隊尾下標

queueentry entry[100];       // 佇列容器

解題思路:

實現迴圈陣列

circular arrays(迴圈陣列)

將陣列設想為乙個迴圈的,而非線性的; 用兩個下標front和rear記錄隊頭和隊尾位置; 新增元素時,rear右移,將元素置於rear位置。當rear等於max時(last index), rear 置 0. 元素出隊時,刪除位於front位置的元素,然後front右移. 當front 等於 max時, 置 front 為 0。

問題:無法區分滿佇列與空佇列。

解決方法:

1. 在陣列中空乙個位置;

2. 使用乙個布林量表示佇列是否滿。當rear剛好到達front之前時,置 此標誌為true.

3. 使用乙個計數器( counter)以記錄佇列中的元素個數。

此處**採用第一種解決辦法:

1.front始終指向佇列第乙個元素,即總是放著東西的;

rear始終指向佇列的下乙個位置,即總是空著的;

2.假設陣列開到100,那麼佇列滿時,實際長度為99,判斷為滿:(rear + 1) % 100 == front

判斷為空:front==rear

3.當排到陣列尾部,要跳到頭部來繼續進行迴圈。

實現**:

enum

errorcode ;

const

int maxqueue = 100

;template

class

myqueue

;template

myqueue

::myqueue()

template

bool myqueue:: empty() const

template

errorcode myqueue

入隊 if

(full())

else

}template

errorcode myqueue

::serve()

else

}template

errorcode myqueue

::retrieve(queueentry &item) const

else

}template

bool myqueue::full() const

template

int myqueue::size() const

else

}template

void myqueue::clear()

template

errorcode myqueue

::retrieve_and_serve(queueentry &item)

(本博文或多或少參考過其他網上資料,但時間已久忘記當初的參考了,在此對他們表示感謝!)

佇列 陣列實現 迴圈佇列

1 陣列佇列.cpp 定義控制台應用程式的入口點。2 3 include4 include5 include abs 6 include7 include8 using namespace std 9 10 定義乙個佇列的結構體11 struct myqueue12 17 18 規則說明 19 nh...

渣渣之基於陣列實現迴圈佇列

佇列滿了的情況就兩種 1 尾部指標 首部指標 陣列的長度 1 2 首部 尾部 1.如果要問為啥等於一,因為再加一下就追尾了 隊列為空怎麼判斷?那就是看是否滿足初識賦值情況唄,滿足就是四大皆空的空。考慮特殊性。第一 佇列是否滿了,滿肯定加不了。第二 是否是第一次加元素?第一次那麼珍貴肯定得慎重啊,為嘛...

基於陣列實現的佇列

author qcg version 2019 5 13.description 基於陣列實現的佇列 佇列的型別 順序佇列 鏈式佇列 迴圈佇列 阻塞佇列 併發佇列 public class myarrayqueue 入隊 param item 入隊元素 return 是否成功 public bool...