• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

ngx_queue_t双向链表

php 搞代码 4年前 (2022-01-23) 21次浏览 已收录 0个评论

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的指针 链表容器初始化,空链表
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所在的结构体变量之后

测试sort

<code><span>#include </span><span>#include "./ngx_queue.h"</span><span>//元素所在结构体</span><span>typedef</span><span>struct</span> _TestNode{    u_char *str;    ngx_queue_t qEle;   <span>//包含ngx_queue_t组成双向链表</span><span>int</span> num;}TestNode;<span>//设置的比较函数</span>ngx_int_t compTestNode(<span>const</span> ngx_queue_t *a,<span>const</span> ngx_queue_t *b){    TestNode *aNode = ngx_queue_data(a, TestNode, qEle);    TestNode *bNode = ngx_queue_data(b, TestNode, qEle);    <span>return</span> aNode->num > bNode->num;}<span>//按顺序打印链表内容</span><span>void</span> printQueue(ngx_queue_t *head){    ngx_queue_t *pNode = NULL;    <span>for</span>(pNode = ngx_queue_head(head);\        pNode != ngx_queue_sentinel(head);\        pNode = ngx_queue_next(pNode)){        <div>本文来*源gaodai^.ma#com搞#代!码网</div><pre>搞gaodaima代码

TestNode *node = ngx_queue_data(pNode,TestNode,qEle); printf(“%d “,node->num); } printf(“\n”);}int main(){ ngx_queue_t queueContainer; //Create a ngx_queue_t variable ngx_queue_init(&queueContainer); //Initialize the variableint i = 0; TestNode node[5]; for(;i<5;++i) node[i].num = i; //可以考虑一下插入后的顺序 ngx_queue_insert_tail(&queueContainer,&node[0].qEle); ngx_queue_insert_head(&queueContainer,&node[1].qEle); ngx_queue_insert_tail(&queueContainer,&node[2].qEle); ngx_queue_insert_after(&queueContainer,&node[3].qEle); ngx_queue_insert_tail(&queueContainer,&node[4].qEle); //Pirnt queue printQueue(&queueContainer); //Sort ngx_queue_sort(&queueContainer,compTestNode); //Print queue after sort printQueue(&queueContainer); return0;}

注:

对于用到的”ngx_queue.h”头文件,我是从Nginx源码中拷贝下来修改了一下,挺简单的,就不上了。


版权声明:Pain is just in your mind.

以上就介绍了ngx_queue_t双向链表,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ngx_queue_t双向链表

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址