LIST链表文档

链表是一种十分实用的数据结构,广泛应用于编程畛域。与数组相比,链表的一个最大长处就是动态性。链表的长度不是在创立时就固定的,咱们能够在运行时随便地减少和删除元素。这使得链表在不确定数据规模的状况下特地有用。

初始化单链表

void slist_init(slist_t list);
参数形容
list单链表句柄

向单链表尾部追加节点

void slist_append(slist_t list, slist_t node);
参数形容
list单链表句柄
node要追加的节点

在单链表中节点后插入节点

void slist_insert_after(slist_t list, slist_t node);
参数形容
list单链表句柄
node要插入的节点

从单链表中移除节点

void slist_remove(slist_t list, slist_t node);
参数形容
list单链表句柄
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);
参数形容
list双链表句柄

在双链表后插入节点

void list_insert_after(list_t list, list_t node);
参数形容
list双链表句柄
node要插入的节点

在双链表前插入节点

void list_insert_before(list_t list, list_t node);
参数形容
list双链表句柄
node要插入的节点

从双链表中移除节点

void list_remove(list_t node);

| 参数 | 形容 |
|:--------|:---------|
| node | 要移除的节点 |

获取双链表长度

size_t list_get_length(list_t list);
参数形容
list双链表句柄
返回
size双链表长度

查看双链表是否为空

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 开源许可协定,可收费利用于商业产品,无需公开公有代码。