像棧一樣,佇列(queue)也是一種線性表,它的特性是先進先出,插入在一端,刪除在另一端。就像排隊一樣,剛來的人入隊(push)要排在隊尾(rear),每次出隊(pop)的都是隊首(front)的人。如圖1,描述了乙個佇列模型。
和棧一樣,佇列也有陣列實現和鍊錶實現兩種,兩種實現都能給出快速的o(1)執行時間,區別在於鍊錶實現指標域要占用空間,頻繁的new和delete會消耗不少的時間開銷,陣列實現唯一的缺點是建立時要確定空間大小。
假如乙個佇列最多只能站10個人,當佔滿10個人後,第11個人就不能入隊,這種情況成為溢位。而如果第乙個人出隊了,剩下的9個人依然還在原來的位置,佇列裡空出了乙個位置,但第11個人還是不能入隊,這種情況成為假溢位。克服假溢位有效的辦法是使用迴圈佇列。
迴圈佇列就是把隊尾和隊首連線起來,形成乙個環,隊尾的下乙個位置就是隊首,這樣可以有效的防止假溢位現象,但佇列的實際容量已然固定。
佇列的實現
佇列的陣列實現和棧差不多,不同的是,棧用top做下標,佇列用front和rear作為下標。
我更改了單鏈表的模板來實現乙個簡單的佇列。**僅供學習,不足之處還請指明,我會對不足之處進行修改和更新。
**如下:
template<
class t>
class queuenode
t data;
//值queuenode* next;
//指向下乙個節點的指標};
template<
class t>
class myqueue ;
template<
class t>
myqueue::myqueue()
template<
class t>
inline unsigned
int myqueue::length()
template<
class t>
void myqueue::push(t x)
else
//如果佇列非空
++queuelength;
//元素個數+1}
template<
class t>
bool myqueue::isempty()
template<
class t>
void myqueue::pop()
template<
class t>
t myqueue::gethead()
佇列的應用
印表機處理作業採用的就是佇列結構,它們會按照提交的順序排列起來。stl也給出了乙個強大的佇列,我們直接可以去用它。
佇列相關問題
如何用兩個棧模擬乙個佇列,如果用兩個佇列模擬乙個棧?
基本資料結構 佇列
佇列實現的是一種先進先出 first in,first out,fifio 的策略,佇列中的插入的操作稱為入隊 enqueue 佇列的刪除操作稱為出隊 dequeue 定義乙個陣列來實現佇列 public class queue public queue int n public boolean i...
資料結構 佇列 queue
佇列 就是生活中的排隊,因此排隊是先到先得,也是先離開隊伍,因此佇列也是採用的先進先出的概念 fifo,慢慢想想作業系統裡面是不是也用到fifo,自己去查吧 到底有沒有 如何能夠準確的定位是先進先出呢,因此採用的就是頭指標front和尾指標rear,通常這兩個指標是封裝成乙個鏈隊 注意front與r...
資料結構 佇列 queue
佇列 queue 是一種採用先進先出 fifo 策略的抽象資料結構,它的想法來自於生活中排隊的策略。顧客在付款結賬的時候,按照到來的先後順序排隊結賬,先來的顧客先結賬,後來的顧客後結賬。同棧的實現一樣,佇列的實現也有陣列實現和鍊錶實現兩種方式。先來看看陣列實現的方法。棧使用top變數記錄棧頂的位置,...