資料結構 佇列 (陣列)

2021-06-22 17:50:41 字數 1593 閱讀 9497

佇列:一種先進先出,在一端進行入隊操作,另一端進行出隊操作的一種受限制的線性表;

既然佇列和棧類似,都是一種受限制的線性表,那麼它們都應該有判空,判滿,壓入值,提取值,刪除值等一些基本操作,不同的是,佇列限制在兩端進行不同的操作,所有隊的資料成員應該有乙個指示隊頭和乙個指示隊尾的兩個指標,加上儲存元素的陣列組成;

寫出隊的類如下:

//靜態陣列的 迴圈隊類

typedef int queueelement;

#define maxs 100

class queue

;

//動態陣列的 迴圈隊類

typedef int queueelement;

class queue

;

現在考慮判斷佇列是否為空的基本操作,如果佇列包含乙個元素,則該元素必然是在陣列的 myfront 位置,而 myback 則在 其 後 乙個位置;如果這個元素被刪除了,myfront 後移一位,此時,myfront==myback 一定成立;所有判斷對列是否為空則只需判斷 :myfront==myback;

但是,由迴圈佇列可知,當佇列滿的時候,也一定是 myfront==myback 成立的時候;不過,我們假設乙個迴圈佇列還有乙個空位,此時,myfront 和 myback 必然相差乙個單位;那麼當myback'向後移動的時候就會和 myfront 相等,此時,佇列就被填滿了,故可以通過: myfront==(myback +1) % mycount  是否相等來判斷佇列是否已滿;

其他基本操作見具體**:

queue::~queue () 

//複製運算子

const queue & queue::operator = (const queue & right)

} }return *this;

}//複製建構函式

queue::queue (const queue & original) : myfront(original.myfront),myback(original.myback),mycount(original.mycount)

else }

queue::queue (int number) : myfront(0),myback(0)

else }

}bool queue::empty () const

bool queue::full () const

void queue::enqueue (const queueelement & value)

else }

void queue::dequeue ()

}queueelement queue::front () const

else

return myarray[myfront];

}

測試**:

int main ()

{ queue s(10);

cout << "created a queue,empty ?\n"<<(s.empty() ?"yes":"no") <> num;

for (int i=0;i

資料結構 陣列佇列

佇列的實現還是依託於一開始所寫的陣列 資料結構 二次封裝自己的陣列 一 完成陣列基本功能 資料結構 二次封裝自己的陣列 二 公升級為泛型陣列 資料結構 二次封裝自己的陣列 三 公升級為動態陣列 下面是佇列的實現 class arrayqueue queue public arrayqueue pub...

資料結構 佇列 迴圈佇列 陣列實現

佇列是一種特殊的 線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 tail 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。以陣列實現的佇列結構,如果是普通佇列,頻繁增刪元素,會造成陣列記憶體空間的大量流失,所...

資料結構 陣列佇列 迴圈佇列

佇列 是 先進先出 的資料結構,從隊尾入隊,從隊頭出隊。佇列中使用的array,參考 資料結構 手寫動態陣列 public inte ce queue public class arrayqueue implements queue public arrayqueue int capacity ov...