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...