資料結構 佇列 queue

2021-07-01 19:30:15 字數 2110 閱讀 5371

佇列:就是生活中的排隊,因此排隊是先到先得,也是先離開隊伍,因此佇列也是採用的先進先出的概念(fifo,慢慢想想作業系統裡面是不是也用到fifo,自己去查吧 到底有沒有)。如何能夠準確的定位是先進先出呢,因此採用的就是頭指標front和尾指標rear,通常這兩個指標是封裝成乙個鏈隊;注意front與rear是節點的資料型別哦~~~~~~

先來看看順序佇列吧:

#define maxsize

typedef struct

sequeue;

//定義乙個指向佇列的指標變數,並申請儲存空間

sequeue * sq = new sequeue;

//佇列的資料區域

sq->data[0] ~ sq->data[maxsize - 1];

//為空隊時:

sq->front = sq->rear = -1;

//入隊操作

sq->rear++;

sq->data[sq->rear] = x;

//出隊操作

sq->front++;

x = sq->data[sq->front]

但是上面的這種會出現一種現象,就是當乙個佇列又有出隊又有入隊時,出了隊的儲存空間不能再次作為入隊所需的儲存空間,這種就是本來對沒有滿,但是不能繼續入隊,這種現象就稱為

假溢位的現象;為了解決這種現象,因此提出了迴圈佇列,也就是將出了隊的空間再次利用作為新入隊元素的所需空間。

到底應該如何才可以將隊迴圈呢?

其實就是尾指標與頭指標進行迴圈加1

//入隊

sq->rear = (sq->rear + 1)%maxsize;

//出隊

sq->front = (sq->front + 1)%maxsize;

但是這種做法就會出現另外乙個問題,那就是隊列為nul和滿隊時都是sq->rear = sq - >front;這樣就傻傻的分不清楚到底是哪種情況。

解決方案:

1:就是犧牲乙個儲存空間,讓這個空間不儲存東西,此時滿隊的條件就是(rear + 1)%maxsize = font;

2:就是定義個變數標識,當標識等於0表示空佇列,等於maxsize表示隊滿。

鏈隊:

typedef struct node

qnode; //鏈隊節點型別

typedef struct

lqueue;

//帶頭結點的佇列

lqueue * init_lqueue()

//入隊操作

void push_queue(lqueue * head, int value)

//判斷隊是否是空

int empty_queue(lqueue * head)

else

return 0;

}//出隊操作

void pop_queue(lqueue * head, int * returnvalue)

}

面試題1:

如果按照index訪問item並就地插入或刪除資料,這種操作比較繁瑣,那使用什麼節構最節省時間?   a

a. sequential list順序表(陣列)

b. double linked list(雙向鍊錶)

c. double linked list with header pointer(單獨儲存head指標的雙向鍊錶)

d. linked list(鍊錶)

面試題2:程式設計實現佇列的入隊和出隊操作

typedef struct student

node;

typedef struct linkqueue

queue;

//佇列的入隊(這是不帶頭結點的操作)

queue * insert(queue * hq, int x)

else

return hq;

}//出隊

queue * del(queue * hq, int * x)

else

else

}return hq;

}

哎~~~,身心疲憊啊~~~~~~~~

資料結構 佇列 queue

佇列 queue 是一種採用先進先出 fifo 策略的抽象資料結構,它的想法來自於生活中排隊的策略。顧客在付款結賬的時候,按照到來的先後順序排隊結賬,先來的顧客先結賬,後來的顧客後結賬。同棧的實現一樣,佇列的實現也有陣列實現和鍊錶實現兩種方式。先來看看陣列實現的方法。棧使用top變數記錄棧頂的位置,...

資料結構 佇列queue

佇列 佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列是有序集合,新新增的一端為隊尾,另一端為隊頭,當乙個元素從隊尾進入佇列時,一直...

資料結構之佇列(Queue)

佇列,顧名思義,也就是一條隊伍,進入隊伍的時候,只能從隊尾排隊,離開隊伍的時候,只能從隊首離開。佇列也有陣列實現和鏈式實現。用一般陣列實現佇列的時候,入隊,則在隊尾插入乙個元素,出隊,則將隊首的元素出隊。那麼,由於陣列的長度是固定的,入隊只能從隊尾入隊,因此經常性的出隊會使得隊首越來越靠近隊尾,隊首...