ngx_queue_t双向链表
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教程有兴趣的朋友有所帮助。

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

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

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

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

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

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

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

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

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