首页 后端开发 php教程 ngx_queue_t双向链表

ngx_queue_t双向链表

Aug 08, 2016 am 09:20 AM
amp queue

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 <stdio.h></stdio.h></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)){
        TestNode *node = ngx_queue_data(pNode,TestNode,qEle);
        <span>printf</span>(<span>"%d "</span>,node->num);
    }
    <span>printf</span>(<span>"\n"</span>);
}

<span>int</span> main(){
    ngx_queue_t queueContainer;         <span>//Create a ngx_queue_t variable</span>
    ngx_queue_init(&queueContainer);    <span>//Initialize the variable</span><span>int</span> i = <span>0</span>;
    TestNode node[<span>5</span>];
    <span>for</span>(;i5;++i)
        node[i].num = i;

    <span>//可以考虑一下插入后的顺序</span>
    ngx_queue_insert_tail(&queueContainer,&node[<span>0</span>].qEle);
    ngx_queue_insert_head(&queueContainer,&node[<span>1</span>].qEle);
    ngx_queue_insert_tail(&queueContainer,&node[<span>2</span>].qEle);
    ngx_queue_insert_after(&queueContainer,&node[<span>3</span>].qEle);
    ngx_queue_insert_tail(&queueContainer,&node[<span>4</span>].qEle);

    <span>//Pirnt queue</span>
    printQueue(&queueContainer);

    <span>//Sort</span>
    ngx_queue_sort(&queueContainer,compTestNode);

    <span>//Print queue after sort</span>
    printQueue(&queueContainer);

    <span>return</span><span>0</span>;
}</code>
登录后复制

注:

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


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

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Laravel开发:如何使用Laravel Queue处理异步任务? Laravel开发:如何使用Laravel Queue处理异步任务? Jun 13, 2023 pm 08:32 PM

随着应用程序变得越来越复杂,处理和管理大量数据和流程是一个挑战。为了处理这种情况,Laravel为用户提供了一个非常强大的工具,即Laravel队列(Queue)。它允许开发人员在后台运行诸如发送电子邮件,生成PDF,处理图像剪裁等任务,而不会对用户界面产生任何影响。在这篇文章中,我们将深入研究如何使用Laravel队列。什么是LaravelQueue队列

多线程环境下Java Queue队列的安全性问题及解决方案 多线程环境下Java Queue队列的安全性问题及解决方案 Jan 13, 2024 pm 03:04 PM

JavaQueue队列在多线程环境下的安全性问题与解决方案引言:在多线程编程中,程序中的共享资源可能面临竞争条件,这可能导致数据的不一致性或者错误。在Java中,Queue队列是一种常用的数据结构,在多个线程同时操作队列的情况下,就存在安全性问题。本文将讨论JavaQueue队列在多线程环境下的安全性问题,并介绍几种解决方案,重点以代码示例的方式解释。一

AMP是什么币? AMP是什么币? Feb 24, 2024 pm 09:16 PM

什么是AMP币?AMP代币是由Synereo团队于2015年创立,作为Synereo平台的主要交易货币。AMP代币旨在通过多种功能和用途,为用户提供更好的数字经济体验。AMP代币的用途AMP代币在Synereo平台中拥有多重角色和功能。首先,作为平台的加密货币奖励系统的一部分,用户能够通过分享和推广内容来获得AMP奖励,这一机制鼓励用户更积极地参与平台的活动。AMP代币还可用于在Synereo平台上推广和传播内容。用户可以通过使用AMP代币提升他们的内容在平台上的曝光率,以吸引更多观众来查看和分

Queue在Java中的应用 Queue在Java中的应用 Feb 18, 2024 pm 03:52 PM

Java中Queue的用法在Java中,Queue(队列)是一种常用的数据结构,它遵循先进先出(FIFO)原则。Queue可用于实现消息队列、任务调度等场景,能够很好地管理数据的排列和处理顺序。本文将介绍Queue的用法,并提供具体的代码示例。Queue的定义和常用方法在Java中,Queue是JavaCollectionsFramework中的一个接口

Java Queue队列的基本概念与基本操作 Java Queue队列的基本概念与基本操作 Jan 13, 2024 pm 01:04 PM

JavaQueue队列的基本概念与操作队列(Queue)是一种常见的数据结构,它按照先进先出(FIFO)的原则进行操作。在Java编程中,我们可以使用Queue接口和它的实现类来实现队列的功能。本文将介绍Queue的基本概念以及常用的操作,并给出具体的代码示例。一、队列的基本概念队列是一种线性数据结构,它有两个基本操作:入队(enqueue)和出队(deq

PHP SPL 数据结构:提升应用程序性能的秘诀 PHP SPL 数据结构:提升应用程序性能的秘诀 Feb 19, 2024 pm 11:12 PM

SPL数据结构的概念PHPSPL(标准php库)包含一组数据结构和迭代器类,旨在增强PHP的原生数据类型。这些结构经过优化,可以高效地存储和操作各种数据,并提供一致的界面和灵活的迭代机制。核心SPL数据结构SPL库提供了多种数据结构,包括:LinkedList:双向链表,允许快速插入、删除和搜索。Stack:后进先出(LIFO)数据结构,用于堆栈操作。Queue:先进先出(FIFO)数据结构,用于队列操作。Map:键值对集合,提供高效的键查找和数据存储。Set:唯一值集合,支持快速成员查找和集合

Java集合框架面试通关秘籍:攻克算法和数据结构,斩获心仪offer Java集合框架面试通关秘籍:攻克算法和数据结构,斩获心仪offer Feb 23, 2024 am 10:30 AM

Java集合框架是Java编程语言中用于存储和操作数据的核心组件,提供了丰富的集合类型和相关操作。在Java面试中,集合框架是考察的重点之一,掌握集合框架的原理和用法,能够帮助你轻松应对面试,斩获心仪offer。1.集合框架概述Java集合框架提供了各种各样的集合类型,如List、Set、Map和Queue,每种类型都有其独特的特点和用途。List是有序的元素集合,可以重复元素;Set是有序的元素集合,不能重复元素;Map是键值对集合,键是唯一的,值可以是重复的;Queue是先进先出的元素集合。

Amp (AMP) 加密货币暗示即将逆转 Amp (AMP) 加密货币暗示即将逆转 Aug 27, 2024 am 09:04 AM

根据 CoinMarketCap 的数据,Amp [AMP] 加密货币价格在过去 7 天内上涨了 11%,交易价格为 0.0043 美元。

See all articles