紙上談兵 佇列 queue

2021-09-08 09:19:05 字數 2500 閱讀 5004

佇列(queue)是乙個簡單而常見的資料結構。佇列也是有序的元素集合。佇列最大的特徵是first in, first out (fifo,先進先出),即先進入佇列的元素,先被取出。這一點與棧(stack)形成有趣的對比。佇列在生活中很常見,排隊買票、排隊等車…… 先到的人先得到服務並離開佇列,後來的人加入到佇列的最後。佇列是比較公平的分配有限資源的方式,可以讓佇列的人以相似的等待時間獲得服務。

佇列支援兩個操作,隊首的元素離開佇列(dequeue),和新元素加入隊尾(enqueue)。

佇列

佇列在計算機中應用很廣泛。乙個經典的應用是訊息佇列(參考linux程序間通訊),實際上就是利用佇列來分配有限的程序。還有fifo檔案(哦,你可以看到,這種檔案叫做fifo,肯定是和佇列有關),用以實現管道傳輸。再比如,我們將多個列印任務傳送給印表機,印表機也是使用佇列來安排任務的順序。

和棧相似,佇列也可以有多種實現方式,這裡是基於單鏈表的實現。

與表(list)中的實現方式略有不同的是,這裡的head node有兩個指標,乙個(next)指向下乙個元素,乙個(end)指向佇列的最後乙個元素。這樣做的目的是方便我們找到隊尾,以方便的進行enqueue操作。我們依然可以使用之前定義的表,在需要找到隊尾的時候遍歷搜尋到最後乙個元素。

用於佇列的表

下面是**:

/*

by vamei

*//*

use single-linked list to implement queue

*/#include

#include

typedef

struct node *position;

typedef

intelementtp;

//point to the head node of the list

typedef struct headnode *queue;

struct

node ;

/** cautious: "headnode" is different from "node",

* it's another struct

* end: points to the last value in the queue */

struct

headnode ;

/** operations */

queue init_queue(

void

);void

delete_queue(queue);

void

enqueue(queue, elementtp);

elementtp dequeue(queue);

intis_null(queue);

/** test */

void main(void

) printf(

"queue is null? %d\n

", is_null(qu));

delete_queue(qu);}/*

* initiate the queue

* malloc the head node.

* head node doesn't store valid data

* head->next is the first node in the queue. */

queue init_queue(

void)/*

* dequeue all elements

* and then delete head node */

void

delete_queue(queue qu)

free(qu);}/*

* enqueue a value to the end of the queue */

void

enqueue(queue qu, elementtp value)

else

qu->end =np; }/*

* dequeue the first value */

elementtp dequeue(queue qu)

else }

/** check: queue is empty? */

intis_null(queue qu)

執行結果如下:

queue is null? 0

dequeue: 1

dequeue: 2

dequeue: 8

queue is null? 1

佇列,fifo

enqueue, dequeue

紙上談兵 佇列 queue

佇列 queue 是乙個簡單而常見的資料結構。佇列也是有序的元素集合。佇列最大的特徵是first in,first out fifo,先進先出 即先進入佇列的元素,先被取出。這一點與棧 stack 形成有趣的對比。佇列在生活中很常見,排隊買票 排隊等車 先到的人先得到服務並離開佇列,後來的人加入到佇...

紙上談兵 棧 stack

棧 stack 是簡單的資料結構,但在計算機中使用廣泛。它是有序的元素集合。棧最顯著的特徵是lifo last in,first out,後進先出 當我們往箱子裡存放一疊書時,先存放的書在箱子下面,我們必須將後存放的書取出來,才能看到和拿出早先存放的書。棧中的每個元素稱為乙個frame。而最上層元素...

紙上談兵 雜湊表 hash table

a b人 身份證號 日期 星座 上面兩個對映中,人 身份證號 是一一對映的關係。在雜湊表中,上述對應過程稱為hashing。a中元素a對應b中元素b,a被稱為鍵值 key b被稱為a的hash值 hash value 韋小寶的hash值 對映在數學上相當於乙個函式f x a b。比如 f x 3x ...