Maison développement back-end tutoriel 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>
Copier après la connexion

整个链表的结构就是:有一个空的头,这个头用作链表的起始和哨兵(遍历时用到),接着用下面的方法向这个头的后续位置加节点。


容器提供的方法

方法名 参数含义 执行意义
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>
Copier après la connexion

注:

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


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

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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Développement Laravel : Comment utiliser Laravel Queue pour gérer des tâches asynchrones ? Développement Laravel : Comment utiliser Laravel Queue pour gérer des tâches asynchrones ? Jun 13, 2023 pm 08:32 PM

À 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 Java Queue dans un environnement multithread Problèmes de sécurité et solutions pour Java Queue dans un environnement multithread Jan 13, 2024 pm 03:04 PM

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

Quelle pièce est l'AMP ? Quelle pièce est l'AMP ? Feb 24, 2024 pm 09:16 PM

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.

Application de la file d'attente en Java Application de la file d'attente en Java Feb 18, 2024 pm 03:52 PM

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 de base et opérations de base de Java Queue Concepts de base et opérations de base de Java Queue Jan 13, 2024 pm 01:04 PM

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.

Structures de données PHP SPL : secrets pour améliorer les performances des applications Structures de données PHP SPL : secrets pour améliorer les performances des applications Feb 19, 2024 pm 11:12 PM

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

Secrets d'entrevue du cadre de collecte Java : surmontez les algorithmes et les structures de données et obtenez votre offre préférée Secrets d'entrevue du cadre de collecte Java : surmontez les algorithmes et les structures de données et obtenez votre offre préférée Feb 23, 2024 am 10:30 AM

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.

Amp (AMP) fait allusion à un renversement de crypto-monnaie à venir Amp (AMP) fait allusion à un renversement de crypto-monnaie à venir Aug 27, 2024 am 09:04 AM

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.

See all articles