ngx_queue_t 二重リンク リスト
構造
<code><span>typedef</span><span>struct</span> ngx_queue_s ngx_queue_t; <span>typedef</span><span>struct</span> ngx_queue_s { ngx_queue_t *prev; ngx_queue_t *next; };</code>
リンク リスト全体の構造は次のとおりです: 空のヘッドがあり、リンク リストの開始点および番兵として使用されます (トラバーサル中に使用されます)。次に、次のものを使用します。このヘッド位置プラスノードをフォローアップするメソッド。
コンテナが提供するメソッド
メソッド名 | パラメータの意味 | 実行の意味 |
---|---|---|
ngx_queue_init(h) | hはngx_queue_tのポインタ | チェーン テーブルコンテナの初期化、空のリンクlist |
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) | 同上 | -> を削除します; q (q を除く) と q->tail の 2 つの部分があり、後半のポインタは n |
ngx_queue_add(h,n) | h に格納され、n は両方とも二重リンク リスト コンテナ ポインタです。 | リンクされたリストをマージします。nの後にhが続きます |
ngx_queue_middle(h) | 上記と同じ | N/2+1番目の要素のポインタを返します |
ngx_queue_sort(h,compfunc) | cmpfuncは要素の比較方法です | ** Insert sort ** CPMFUNCプロトタイプ: ngx_int_t (*cpmfunc) (const ngx_queue_t*a, const ngx_queue_t*b) を使用します |
2つの要素のメソッド名-way リンクリスト |
ngx_queue_next(q) | qはリンクリスト内の構造体変数ngx_queue_tのメンバへのポインタです | 次の値を返しますelement |
---|---|---|
同上 | 前の要素を返す | |
q 上記と同様、typeは構造体の型、memberは名前構造体のngx_queue_t | q変数が配置されている構造体変数の最初のアドレスを返します | |
qとxは両方とも特定の構造体変数のngx_queue_tメンバーポインタです | 構造体を挿入します変数 x は構造体の後ろです 変数 q は | |
テストソート | 注: | 使用する「ngx_queue.h」ヘッダーファイルは、Nginx のソースコードからコピーして修正しました。とても簡単なのでアップしません。 |
上記は ngx_queue_t の二重リンク リストを、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。