佇列:一種先進先出,在一端進行入隊操作,另一端進行出隊操作的一種受限制的線性表;
既然佇列和棧類似,都是一種受限制的線性表,那麼它們都應該有判空,判滿,壓入值,提取值,刪除值等一些基本操作,不同的是,佇列限制在兩端進行不同的操作,所有隊的資料成員應該有乙個指示隊頭和乙個指示隊尾的兩個指標,加上儲存元素的陣列組成;
寫出隊的類如下:
//靜態陣列的 迴圈隊類
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...