mr-library(软件包)LIST链表

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值