LIST链表文档
链表是一种十分实用的数据结构,广泛应用于编程畛域。与数组相比,链表的一个最大长处就是动态性。链表的长度不是在创立时就固定的,咱们能够在运行时随便地减少和删除元素。这使得链表在不确定数据规模的状况下特地有用。
初始化单链表
void slist_init(slist_t list);
向单链表尾部追加节点
void slist_append(slist_t list, slist_t node);
在单链表中节点后插入节点
void slist_insert_after(slist_t list, slist_t node);
从单链表中移除节点
void slist_remove(slist_t list, slist_t node);
获取单链表长度
size_t slist_get_length(slist_t list);
| 参数 | 形容 |
|:-------|:---------|
| list | 单链表句柄 |
| 返回 | |
| size | 单链表长度 |
获取单链表尾节点
slist_t slist_get_tail(slist_t list);
参数 | 形容 |
---|
list | 单链表句柄 |
返回 | |
slist | 单链表尾节点 |
检查单链表是否为空
int slist_is_empty(slist_t list);
参数 | 形容 |
---|
list | 单链表句柄 |
返回 | |
bool | 单链表是否为空 |
初始化双链表
void list_init(list_t list);
在双链表后插入节点
void list_insert_after(list_t list, list_t node);
在双链表前插入节点
void list_insert_before(list_t list, list_t node);
从双链表中移除节点
void list_remove(list_t node);
| 参数 | 形容 |
|:--------|:---------|
| node | 要移除的节点 |
获取双链表长度
size_t list_get_length(list_t list);
查看双链表是否为空
int list_is_empty(list_t list);
参数 | 形容 |
---|
list | 双链表句柄 |
返回 | |
bool | 双链表是否为空 |
通过子结构体指针获取构造体指针
#define slist_container_of(node, type, member) \ ((type *)((char *)(node) - (unsigned long)(&((type *)0)->member)))
参数 | 形容 |
---|
node | 构造体中子构造体的指针 |
type | 构造体类型 |
member | 子结构体在构造体中的地位 |
返回 | |
struct | 构造体指针 |
应用示例:
/* 示例构造体 */struct example { int a; struct list list;};int main(void){ struct example e1; struct example *e2; struct list *list = &e1.list; /* 获取e1 */ e2 = mr_container_of(list, struct example, list);}
----------
下载代码(门路:mr-library/ package / list)
----------
许可协定
遵循 Apache License 2.0 开源许可协定,可收费利用于商业产品,无需公开公有代码。