資料結構筆記3.3
順序佇列是用順序表實現的(即依託於陣列),這裡實現的是迴圈佇列,其實也可以不用迴圈,但是那樣的話,空間的利用效率就太低了,這就是」假溢位」問題,因為在陣列的前端可能還有空閒的位置(因為佇列中的資料是在動態變化的,可能出隊也可能入對)。
為了能夠充分利空間,所以用迴圈佇列,即在邏輯上把陣列的隊結構看成乙個環。具體實現:實現的方式還是十分巧妙地,運用兩個指標和鐘運算(就是取模或是取餘運算)。
隊頭指標進1:front = (front + 1) % maxsize;
隊尾指標進1 : rear = (rear + 1) % maxsize;
上面兩個式子就是鐘運算在佇列資料操作時候的實現原理。
另外,在判斷佇列null與佇列full的時候會遇到混淆的問題,null的時候,在即rear == front ,但是由於是迴圈表,當表full的時候,兩者也是相等的,一種區分方式就是當rear檢測到其下乙個就是front的時候作為佇列滿的依據,這樣就相當於佇列滿的時候也會有乙個節點是空閒的。
好了,在編寫這個類的過程中,需要強調的就這幾個地方,下面貼出**:
虛基類**(此**段放入queue.h當中,並在模板類**中包含)
template
class queue //建構函式
~queue(){} //析構函式
virtual
bool enqueue(const t & x) = 0; //新元素x進入佇列
virtual
bool delqueue(t & x) = 0; //隊頭元素出佇列
virtual
bool getfront(t & x) = 0; //讀取隊頭元素的值
virtual
bool isempty()const = 0; //判斷佇列是否為null
virtual
bool isfull() const = 0; //判斷佇列是否已滿
virtual
int getsize() const = 0; //求佇列元素的個數
};
模板class**:
#include
#include
#include
#include "queue.h"
using
namespace
std;
//順序佇列模板類定義(迴圈佇列)
template
class seqqueue : public queue;
//函式定義
template
seqqueue::seqqueue(int sz)
template
seqqueue::~seqqueue()
template
bool seqqueue::enqueue(const t & x)
elements[rear] = x;
rear = (rear + 1) % maxsize; //通過鐘運算實現元素的迴圈填充
return
true;
}template
bool seqqueue::delqueue(t & x)
x = elements[front];
front = (front + 1) % maxsize;
return
true;
}template
bool seqqueue::getfront(t & x)
x = elements[front];
return
true;
}template
bool seqqueue::isempty() const
else
}template
bool seqqueue::isfull() const
else
}template
void seqqueue::makeempty()
template
int seqqueue::getsize() const
template
void seqqueue::output(ostream & out)
cout
<< endl;
}template
ostream & operator
<< (ostream & out, seqqueue& sq)
main測試**:
int main()
else
squeue.enqueue(2); //取佇列大小測試
squeue.enqueue(3);
squeue.enqueue(4);
cout
<< squeue.getsize() << endl;
system("pause");
return
0;}
執行結果:
資料結構 佇列 順序佇列 迴圈佇列 鏈佇列)
前言 一 佇列的定義 二 佇列的順序儲存結構 1.順序佇列的定義 2.迴圈佇列定義 3.迴圈佇列的基本操作 三 佇列的鏈式儲存結構 1.鏈佇列的定義 2.鏈佇列的基本操作 佇列也是一種線性表,其特殊性在於佇列的基本操作是線性表的子集。佇列按 先進先出 的規則進行操作,故稱其為操作受限的線性表。佇列 ...
資料結構 佇列實現(順序迴圈佇列 鏈式佇列)
佇列的介面 public inte ce qqueue 存在假溢位問題!不建議使用 使用模擬迴圈的方式避免假溢位 實現 package pers.zhang.queue author zhang date 2020 1 17 11 45 順序迴圈佇列 public class seqqueue im...
資料結構 環形佇列 迴圈佇列 順序儲存
佇列是對頭出 隊尾入的先進先出線性表。需要兩個指標front和rear分別來指向隊頭和隊尾。front指向隊頭元素的前乙個位置,rear總是指向隊尾元素。進隊 rear 1 出隊 front 1 隊空條件 front rear 隊滿條件 rear maxsize 1 但是這樣會出現假溢位的情況,因為...