在前兩篇中講述了順序佇列中的隊頭移動與不移動兩種順序佇列,今天討論順序佇列中的迴圈佇列,這種迴圈佇列是用一維陣列實現的。在隊頭移動的情況下,根據元素個數與佇列容量之間的數量關係來解決假溢位問題。
從上圖中我們可以理解為什麼這種佇列結構可以解決假溢位問題,但是隨之而來,我們要如何判定迴圈佇列已滿呢?
在此處我有三種辦法:
其一,犧牲乙個儲存單元,使得一旦插入時發現元素個數已經達到最大元素個數-1,便說明已滿。
其二,設定乙個標記,若已插入元素,設定為1,為插入元素,設定為0,在插入時,判斷標記的值。如下圖示。
其三,使用乙個計數器count,每次將要插入時,count++,判斷count與最大元素個數的大小,相等,表示已滿
在本文中,我使用第一種方法,以犧牲乙個儲存單元來解決佇列已滿問題。
//迴圈佇列
#includeusing namespace std;
typedef int typedata;
#define max_size 5
typedef class seqlist
//返回元素個數
int size() }
//入佇列
bool push_back(typedata data)
else if (rear == (max_size-1))
else
array[rear++] = data;
return true;
} //出佇列,隊頭
bool pop_front()
if (front == max_size)
else
front++;
return true;
} //列印
void 列印()
else
}~seqlist()
private:
typedata array[max_size];
int front;
int rear;
};void test()
int main()
佇列 順序迴圈佇列
順序佇列 sequence queue 用一片連續的儲存空間來儲存佇列中的資料元素.用一維陣列來存放順序佇列中的資料元素。隊頭位置設在陣列下標為 0 的端,用 front 表示 隊尾位置設在陣列的另一端,用 rear 表示。front 和 rear 隨著插入和刪除而變化。當隊列為空時,front r...
迴圈佇列 順序佇列(C )
佇列 queue 是一種限定訪問位置的線性變。他允許在表的一端插入,在另一端刪除。這個和計算機排程策略中的先來先服務fcfs first come first served 是一樣的。佇列中可以插入的一端為隊尾 rear 允許刪除的一端稱為隊頭 front 佇列也分為兩種,一種是用陣列的儲存表示,一...
佇列之順序佇列與迴圈佇列
一 佇列的概念 只能在表的一端進行插入操作,只能在表的另一端進行刪除操作,這種資料結構稱為 佇列。把允許插入的一端叫 隊尾 rear 允許刪除的一端叫 對頭 front 二 佇列的分類 佇列本身也是一種線性表,因而和線性表一樣也有順序和鏈式儲存結構兩種儲存方式。採用順序儲存結構實現的佇列稱為順序佇列...