迴圈佇列 順序佇列(C )

2022-07-12 03:06:10 字數 2302 閱讀 5170

佇列(queue)是一種限定訪問位置的線性變。他允許在表的一端插入,在另一端刪除。這個和計算機排程策略中的先來先服務fcfs(first come/first served)是一樣的。佇列中可以插入的一端為隊尾(rear),允許刪除的一端稱為隊頭(front)。

佇列也分為兩種,一種是用陣列的儲存表示,一種是基於鍊錶的儲存表示。

基於陣列的儲存表示的佇列被稱為順序佇列。其資料成員包括,一維陣列elements用來儲存資料,指標front和rear用來指示隊尾隊頭的位置,maxsize是陣列的最大長度。

從上邊的圖可以看出來,rear指標到指到陣列最後一位時就不能繼續往後新增元素,如果之前刪除過元素,front指標前還有空閒的空間未被使用,造成空間的浪費。所以,使佇列迴圈起來就可以使其最大限度的利用空間。

變成迴圈佇列,為了避免越界,每次新增新元素時,尾指標需要加一後對堆長取餘

即 rear = (rear+1)%maxsize;

刪除元素也一樣

front = (front+1)%maxsize;

為了區別於空佇列,用(rear+1)%maxsize==front來判斷是否隊滿,即隊尾走到隊頭前乙個位置即判定隊滿。再因為隊尾所指的空間為最後乙個元素的下乙個位置,所以迴圈佇列最多能存放maxsize-1個元素。

#ifndef _queue_h

#define _queue_h

#includeusing namespace std;

const int maxsize = 50;

templateclass queue

; ~queue(){};

virtual bool enqueue(const t& x) = 0;

virtual bool dequeue(t& x) = 0;

virtual bool getfront(t& x) = 0;

virtual bool isempty()const = 0;

virtual bool isfull()const = 0;

virtual int getsize()const = 0;

};#endif

#include#include"queue.h"

templateclass seqqueue;

templateostream& operator<< (ostream& out, seqqueue& q)//將友元函式宣告在前可以避免其警告友元函式未宣告

//析構函式

bool enqueue(const t& x);//入佇列

bool dequeue(t& x);//出佇列

bool getfront(t& x);//找隊頭

bool isempty()const//判空

bool isfull()const//判滿

int getsize()const//得隊長

friend ostream& operator<<<>(ostream& out, seqqueue& q);

//void print();

};/*templatevoid seqqueue::print()

}}*/

templatebool seqqueue::enqueue(const t& x)

return false;

}templatebool seqqueue::dequeue(t& x)

return false;

}templatebool seqqueue::getfront(t& x)

return false;

}templateseqqueue::seqqueue(int sz):front(0),rear(0),maxsize(sz)

int main()

{ seqqueueq(7);

for(int i=7; i>0; --i)

q.enqueue(i);

cout<=0; --i)

q.dequeue(q);

cout<

執行結果

迴圈佇列 順序佇列

在前兩篇中講述了順序佇列中的隊頭移動與不移動兩種順序佇列,今天討論順序佇列中的迴圈佇列,這種迴圈佇列是用一維陣列實現的。在隊頭移動的情況下,根據元素個數與佇列容量之間的數量關係來解決假溢位問題。從上圖中我們可以理解為什麼這種佇列結構可以解決假溢位問題,但是隨之而來,我們要如何判定迴圈佇列已滿呢?在此...

佇列 順序迴圈佇列

順序佇列 sequence queue 用一片連續的儲存空間來儲存佇列中的資料元素.用一維陣列來存放順序佇列中的資料元素。隊頭位置設在陣列下標為 0 的端,用 front 表示 隊尾位置設在陣列的另一端,用 rear 表示。front 和 rear 隨著插入和刪除而變化。當隊列為空時,front r...

C 迴圈順序佇列

顧名思義 採用順序結構存放的佇列稱為順序佇列 迴圈順序佇列可以避免佇列的假溢位現象的發生。如下圖示,迴圈佇列的幾種特殊情況。學習完順序迴圈佇列個人感覺應該注意的事項 front rear只是表示在base i 這個順序表中的索引值,而不是記憶體的絕對位址,這樣也才在後面的迴圈的時候處理起來比較方便 ...