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

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

À mesure que les applications deviennent plus complexes, le traitement et la gestion de grandes quantités de données et de processus constituent un défi. Afin de gérer cette situation, Laravel met à disposition des utilisateurs un outil très puissant, la Laravel Queue (Queue). Il permet aux développeurs d'exécuter des tâches telles que l'envoi d'e-mails, la génération de PDF, la gestion du recadrage d'images, etc. en arrière-plan sans aucun impact sur l'interface utilisateur. Dans cet article, nous verrons comment utiliser les files d'attente Laravel. Qu'est-ce que la file d'attente LaravelQueue

Problèmes de sécurité et solutions pour les files d'attente JavaQueue dans les environnements multithread Introduction : Dans la programmation multithread, les ressources partagées dans le programme peuvent être confrontées à des conditions de concurrence, ce qui peut entraîner une incohérence des données ou des erreurs. En Java, la file d'attente est une structure de données couramment utilisée lorsque plusieurs threads exploitent la file d'attente en même temps, des problèmes de sécurité surviennent. Cet article abordera les problèmes de sécurité des files d'attente JavaQueue dans les environnements multithread, et présentera plusieurs solutions, en se concentrant sur des explications sous forme d'exemples de code. un

Qu’est-ce que la pièce AMP ? Le token AMP a été créé par l'équipe Synereo en 2015 comme principale devise de trading de la plateforme Synereo. Le jeton AMP vise à offrir aux utilisateurs une meilleure expérience économique numérique grâce à de multiples fonctions et utilisations. Objectif du jeton AMP Le jeton AMP a plusieurs rôles et fonctions dans la plateforme Synereo. Premièrement, dans le cadre du système de récompense en crypto-monnaie de la plateforme, les utilisateurs peuvent gagner des récompenses AMP en partageant et en promouvant du contenu, un mécanisme qui encourage les utilisateurs à participer plus activement aux activités de la plateforme. Les jetons AMP peuvent également être utilisés pour promouvoir et distribuer du contenu sur la plateforme Synereo. Les utilisateurs peuvent augmenter la visibilité de leur contenu sur la plateforme en utilisant des jetons AMP pour attirer davantage de téléspectateurs à consulter et à partager.

Utilisation de la file d'attente en Java En Java, la file d'attente (file d'attente) est une structure de données couramment utilisée qui suit le principe du premier entré, premier sorti (FIFO). La file d'attente peut être utilisée pour implémenter des files d'attente de messages, la planification de tâches et d'autres scénarios, et peut bien gérer la disposition et l'ordre de traitement des données. Cet article présentera l'utilisation de Queue et fournira des exemples de code spécifiques. La définition et les méthodes courantes de Queue sont en Java. Queue est une interface dans JavaCollectionsFramework.

Concepts et opérations de base de JavaQueue La file d'attente (Queue) est une structure de données commune qui fonctionne selon le principe du premier entré, premier sorti (FIFO). En programmation Java, nous pouvons utiliser l'interface Queue et ses classes d'implémentation pour implémenter des fonctions de file d'attente. Cet article présentera les concepts de base et les opérations courantes de Queue, et donnera des exemples de code spécifiques. 1. Le concept de base de la file d'attente La file d'attente est une structure de données linéaire. Elle comporte deux opérations de base : mettre en file d'attente et deq.

Concept des structures de données SPL PHPSPL (Standard PHP Library) contient un ensemble de structures de données et de classes d'itérateurs conçues pour améliorer les types de données natifs de PHP. Ces structures sont optimisées pour stocker et manipuler efficacement une variété de données et fournir une interface cohérente et un mécanisme d'itération flexible. Structures de données SPL de base La bibliothèque SPL fournit une variété de structures de données, notamment : LinkedList : une liste doublement chaînée qui permet une insertion, une suppression et une recherche rapides. Pile : structure de données dernier entré, premier sorti (LIFO) pour les opérations de pile. File d'attente : structure de données premier entré, premier sorti (FIFO) pour les opérations de file d'attente. Carte : une collection de paires clé-valeur, offrant une recherche de clé et un stockage de données efficaces. Ensemble : collection de valeurs uniques, prend en charge la recherche et la collecte rapides de membres

Le framework de collection Java est le composant principal du langage de programmation Java pour le stockage et la manipulation des données, et fournit un riche ensemble de types de collection et d'opérations associées. Dans les entretiens Java, le cadre de collecte est l'un des objectifs de l'examen. La maîtrise des principes et de l'utilisation du cadre de collecte peut vous aider à gérer facilement l'entretien et à obtenir votre offre préférée. 1. Présentation du framework de collection Le framework de collection Java fournit une variété de types de collection, tels que List, Set, Map et Queue, chaque type ayant ses caractéristiques et ses utilisations uniques. List est une collection ordonnée d'éléments et les éléments peuvent être répétés ; Set est une collection ordonnée d'éléments et les éléments ne peuvent pas être répétés ; Map est une collection de paires clé-valeur, les clés sont uniques et les valeurs peuvent être répétées ; répété; La file d'attente est une collection d'éléments premier entré, premier sorti.

Le prix de la crypto Amp [AMP] a augmenté de 11 % au cours des sept derniers jours et se négociait à 0,0043 $, au moment de la rédaction, selon CoinMarketCap.
