typedef
struct ngx_queue_s ngx_queue_t;
typedef
struct ngx_queue_s ;
整個鍊錶的結構就是:有乙個空的頭,這個頭用作鍊錶的起始和哨兵(遍歷時用到),接著用下面的方法向這個頭的後續位置加節點。
方法名引數含義
執行意義
ngx_queue_init(h)
h是ngx_queue_t的指標
鍊錶容器初始化,空鍊錶
ngx_queue_empty(h)
同上檢查鍊錶是否為空
nxg_queue_insert_head(h,x)
h同上,x為待插入ngx_queue_t指標
頭插法nxg_queue_insert_head(h,x)
同上尾插法
ngx_queue_head(h)
同上返回頭指標
ngx_queue_tail(h)
同上返回尾指標
ngx_queue_sentinel(h)
同上返回結構體指標
ngx_queue_remove(x)
同上移除x元素
ngx_queue_split(h,q,n)
同上將鍊錶分為h->q(不包括q)和q->tail兩部分,後一部分的指標存放在n上
ngx_queue_add(h,n)
h和n都是雙向鍊錶容器指標
合併鍊錶,將n接在h之後
ngx_queue_middle(h)
同上返回第n/2+1個元素的指標
ngx_queue_sort(h,compfunc)
cmpfunc是元素的比較方法
使用**插入排序**cpmfunc原型:ngx_int_t (*cpmfunc)(const ngx_queue_t *a,const ngx_queue_t *b)
方法名引數含義
執行意義
ngx_queue_next(q)
q為鍊錶中某個結構體變數ngx_queue_t成員的指標
返回下乙個元素
ngx_queue_prev(q)
同上返回上乙個元素
ngx_queue_data(q,type,member)
q同上,type是該結構體型別,member是ngx_queue_t在該結構體中的名稱
返回q變數所在結構體變數的首位址
ngx_queue_insert(q,x)
q、x都是某個結構體變數的中ngx_queue_t成員指標
將x所在的結構體變數插入到q所在的結構體變數之後
#include
#include "./ngx_queue.h"
//元素所在結構體
typedef
struct _testnodetestnode;
//設定的比較函式
ngx_int_t comptestnode(const ngx_queue_t *a,const ngx_queue_t *b)
//按順序列印鍊錶內容
void printqueue(ngx_queue_t *head)
printf("\n");
}int main()
注:
對於用到的」ngx_queue.h」標頭檔案,我是從nginx原始碼中拷貝下來修改了一下,挺簡單的,就不上了。
mysql 雙向鍊錶 雙向鍊錶
雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...
雙向鍊錶(鍊錶)
雙向鍊錶 每個節點包含指向後繼節點的指標和指向前驅節點的指標。繼承關係圖 實體圖 duallinklist.h duallinklist 雙向鍊錶類模板 成員變數 node 節點實體 m header 頭節點 m length 鍊錶長度 m step 步進長度 m current 當前節點前乙個節點...
雙向鍊錶 3 反轉雙向鍊錶
雙向鍊錶的反轉過程,可以參考下面的例圖。a 原始雙向鍊錶 b 反轉後的雙向鍊錶 下面是乙個用於反轉雙向鍊錶的簡單方法。所需要做的事情就是交換每個節點的前向指標和後向指標,然後調整鍊錶的頭指標和尾指標。include struct node 對鍊錶進行反轉 void reverse node head...