佇列(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 ...