基本資料結構 佇列(queue)

2021-06-17 18:36:53 字數 1407 閱讀 4630

像棧一樣,佇列(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變數記錄棧頂的位置,...