ngx_queue_t Doubly linked list
structure
<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>
The structure of the entire linked list is: there is an empty head, which is used as the start and sentinel of the linked list (used during traversal), and then uses the following method to follow up on this head Position plus node.
Methods provided by the container
Method name | Parameter meaning | Execution meaning |
---|---|---|
ngx_queue_init(h) | h is the pointer of ngx_queue_t | chain Table container initialization, empty linked list |
ngx_queue_empty(h) | Same as above | Check whether the linked list is empty |
nxg_queue_insert_head(h,x) | hSame as above, x is the ngx_queue_t pointer to be inserted | Head insertion method |
nxg_queue_insert_head(h,x ) | Same as above | Tail insertion method |
ngx_queue_head(h) | Same as above | Return to the back pointer |
ngx_queue_tail(h) | Same as above | Return to the tail pointer |
ngx_queue_sentinel(h) | Same as above | Return the structure pointer |
ngx_queue_remove(x) | Same as above | Remove the -> There are two parts: q (excluding q) and q->tail. The pointer of the latter part is stored on n |
ngx_queue_add(h,n) | h and n are both doubly linked list container pointers | merge the linked lists. n is followed by h |
ngx_queue_middle(h) | Same as above | Returns the pointer of the N/2+1th element |
ngx_queue_sort(h,compfunc) | cmpfunc is the comparison method of elements | Use ** Insert sort ** CPMFUNC prototype: ngx_int_t (*cpmfunc) (const ngx_queue_t*a, const ngx_queue_t*b) |
The method name of the element in the two -way linked list |
ngx_queue_next(q) | q is a pointer to a member of a structure variable ngx_queue_t in the linked list | Returns the next element |
---|---|---|
Same as above | Return the previous element | |
q Same as above, type is the structure type, member is the name of ngx_queue_t in the structure | Returns the first address of the structure variable where the q variable is located | |
q and x are both ngx_queue_t member pointers of a certain structure variable | Insert the structure variable where x is after the structure variable where q is | |
Test sort | Note: | For the "ngx_queue.h" header file used, I copied it from the Nginx source code and modified it. It's quite simple, so I won't upload it. |
The above introduces the ngx_queue_t doubly linked list, including the relevant content. I hope it will be helpful to friends who are interested in PHP tutorials.