ngx queue t雙向鍊錶

2021-07-04 01:07:00 字數 1742 閱讀 4355

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...