nginx数据结构-ngx_list
2015-12-17 22:05
295 查看
ngx_list_t顾名思义,就像数据结构中的链表,但是它跟我们常见的链表实现的list有什么不同呢?不同点就在于它的节点,它的节点不像我们常见的list的节点,只能存放一个元素,ngx_list_t的节点实际上是一个固定大小的数组。
初始化的时候,我们需要设定元素需要占用的空间大小,每个节点数组的容量大小。
添加元素到这个list里面的时候,会在进行尾部插入,给最后的数组上添加元素,但是如果尾部节点的数组存满了,那么必须增加一个新的节点到这个list里面去。
下面我们来具体看一下它的定义,这些定义和相关的操作函数定义在src/core/ngx_list.h和src/core/ngx_list.c文件中。
ngx_list_part_s表示链表中节点数组,ngx_list_s表示链表。
我们来看一下提供的一个操作的函数。
1:ngx_list_t *ngx_list_create(ngx_pool_t*pool, ngx_uint_t n, size_t size);
该函数创建一个ngx_list_t类型的对象,并对该list的第一个节点分配存放元素的内存空间。
pool: 分配内存使用的pool。
n: 每个节点固定长度的数组的长度。
size: 存放的具体元素的个数。
返回值: 成功返回指向创建的ngx_list_t对象的指针,失败返回NULL。
2:void *ngx_list_push(ngx_list_t *list);
//尾插法
该函数在给定的list的尾部追加一个元素,并返回指向新元素存放空间的指针。如果追加失败,则返回NULL。
3:static ngx_inline ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t*pool, ngx_uint_t n, size_t size);
该函数是用于ngx_list_t类型的对象已经存在,但是其第一个节点存放元素的内存空间还未分配的情况下,可以调用此函数来给这个list的首节点来分配存放元素的内存空间。
若是ngx_list_t类型的变量,则需要通过调用函数ngx_list_create创建的,用ngx_list_init函数初始化,否则,你往这个list里追加元素就可能引发不可预知的行为,亦或程序会崩溃的哦。。
初始化的时候,我们需要设定元素需要占用的空间大小,每个节点数组的容量大小。
添加元素到这个list里面的时候,会在进行尾部插入,给最后的数组上添加元素,但是如果尾部节点的数组存满了,那么必须增加一个新的节点到这个list里面去。
下面我们来具体看一下它的定义,这些定义和相关的操作函数定义在src/core/ngx_list.h和src/core/ngx_list.c文件中。
ngx_list_part_s表示链表中节点数组,ngx_list_s表示链表。
我们来看一下提供的一个操作的函数。
1:ngx_list_t *ngx_list_create(ngx_pool_t*pool, ngx_uint_t n, size_t size);
该函数创建一个ngx_list_t类型的对象,并对该list的第一个节点分配存放元素的内存空间。
pool: 分配内存使用的pool。
n: 每个节点固定长度的数组的长度。
size: 存放的具体元素的个数。
返回值: 成功返回指向创建的ngx_list_t对象的指针,失败返回NULL。
2:void *ngx_list_push(ngx_list_t *list);
//尾插法
该函数在给定的list的尾部追加一个元素,并返回指向新元素存放空间的指针。如果追加失败,则返回NULL。
3:static ngx_inline ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t*pool, ngx_uint_t n, size_t size);
该函数是用于ngx_list_t类型的对象已经存在,但是其第一个节点存放元素的内存空间还未分配的情况下,可以调用此函数来给这个list的首节点来分配存放元素的内存空间。
若是ngx_list_t类型的变量,则需要通过调用函数ngx_list_create创建的,用ngx_list_init函数初始化,否则,你往这个list里追加元素就可能引发不可预知的行为,亦或程序会崩溃的哦。。
相关文章推荐
- 数据结构实验之查找三:树的种类统计【OJ--3375】
- 数据结构期末总结
- 数据结构实验之查找二:平衡二叉树【OJ--3374】
- 数据结构
- 数据结构与算法导论之基本概念和术语介绍
- 高级数据结构研究-B树系列以及红黑树
- 数据结构-队列
- 第15周SHH数据结构-【项目3 - B-树的基本操作】
- 第15周SHH数据结构-【项目2-用哈希法组织关键字】
- 数据结构期末总结(对翻转课堂的感受)
- java资料——数据结构(转)
- 2015年大二上-数据结构-数组与广义表(3)-2.稀疏矩阵的三元组表示
- 2015年大二上-数据结构-数组与广义表(3)-1.稀疏矩阵的三元组表示
- 基础数据结构之数组和链表(三)
- 数据结构(C语言版)全程更新第二篇震撼来袭
- <LeetCode OJ> (104 / 111) Maximum & Minimum Depth of Binary Tree
- 数据结构C语言版车牌号的查询与排序
- 数据结构和算法经典100题-第24题
- 【数据结构实验】图的深度优先/广度优先遍历
- 数据结构和算法经典100题-第23题