資料結構 迴圈佇列(順序佇列)模板類實現

2021-08-09 08:02:40 字數 2724 閱讀 1375

資料結構筆記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 但是這樣會出現假溢位的情況,因為...