单向链表

优质
小牛编辑
138浏览
2023-12-01

单向链表

结构体

struct  rt_slist_node
 单向链表节点 更多...
 

宏定义

#define rt_slist_entry(node, type, member)   rt_container_of(node, type, member)
 获取单向链表节点的数据结构
 
#define rt_slist_for_each(pos, head)   for (pos = (head)->next; pos != RT_NULL; pos = pos->next)
 遍历单向链表
 
#define rt_slist_for_each_entry(pos, head, member)
 循环遍历单向链表head中每一个pos中的member成员
 
#define rt_slist_first_entry(ptr, type, member)   rt_slist_entry((ptr)->next, type, member)
 获取链表中的第一个元素
 
#define rt_slist_tail_entry(ptr, type, member)   rt_slist_entry(rt_slist_tail(ptr), type, member)
 获取链表中的最后一个元素
 

类型定义

typedef struct rt_slist_node rt_slist_t
 单向链表节点类型定义
 

函数

rt_inline void rt_slist_init (rt_slist_t *l)
 初始化一个单链表
 
rt_inline void rt_slist_append (rt_slist_t *l, rt_slist_t *n)
 在单向链表l的尾部追加一个节点
 
rt_inline void rt_slist_insert (rt_slist_t *l, rt_slist_t *n)
 向单向链表节点l后插入一一个节点n
 
rt_inline unsigned int rt_slist_len (const rt_slist_t *l)
 获取单向链表的长度
 
rt_inline rt_slist_trt_slist_remove (rt_slist_t *l, rt_slist_t *n)
 从单向链表l中移除入一个节点n
 
rt_inline rt_slist_trt_slist_first (rt_slist_t *l)
 获取单向链表的第一个节点
 
rt_inline rt_slist_trt_slist_next (rt_slist_t *n)
 获取单向链表节点n的下一个节点
 
rt_inline int rt_slist_isempty (rt_slist_t *l)
 判断单向链表是否为空
 

详细描述

单向链表

宏定义说明

#define rt_slist_entry( node,
 type,
 member 
)   rt_container_of(node, type, member)

获取单向链表节点的数据结构

参数
node入口点
type结构体类型
member结构体中链表的成员名
#define rt_slist_for_each( pos,
 head 
)   for (pos = (head)->next; pos != RT_NULL; pos = pos->next)

遍历单向链表

参数
pos指向宿主结构的指针,在for循环中是一个迭代变量
head链表头
#define rt_slist_for_each_entry( pos,
 head,
 member 
)
值:for (pos = rt_slist_entry((head)->next, typeof(*pos), member); \ &pos->member != (RT_NULL); \ pos = rt_slist_entry(pos->member.next, typeof(*pos), member))

循环遍历单向链表head中每一个pos中的member成员

参数
pos指向宿主结构的指针,在for循环中是一个迭代变量
head单链表的链表头
member结构体中链表的成员名
#define rt_slist_first_entry( ptr,
 type,
 member 
)   rt_slist_entry((ptr)->next, type, member)

获取链表中的第一个元素

参数
ptr链表头
type结构体类型
member结构体中链表的成员名
注解
该链表不能为空。
#define rt_slist_tail_entry( ptr,
 type,
 member 
)   rt_slist_entry(rt_slist_tail(ptr), type, member)

获取链表中的最后一个元素

参数
ptr链表头
type结构体类型
member结构体中链表的成员名
注解
该单向链表不能为空

类型定义说明

typedef struct rt_slist_node rt_slist_t

单向链表节点类型定义

单向链表类型定义

函数说明

rt_inline void rt_slist_init(rt_slist_tl)

初始化一个单链表

参数
l将要被初始化的单向链表
rt_inline void rt_slist_append(rt_slist_tl,
rt_slist_tn 
)

在单向链表l的尾部追加一个节点

参数
l被操作的链表
n将要被追加的节点
rt_inline void rt_slist_insert(rt_slist_tl,
rt_slist_tn 
)

向单向链表节点l后插入一一个节点n

参数
l被插入的链表节点
n将要被插入的节点
rt_inline unsigned int rt_slist_len(const rt_slist_tl)

获取单向链表的长度

参数
l单向链表的链表头
rt_inline rt_slist_t* rt_slist_remove(rt_slist_tl,
rt_slist_tn 
)

从单向链表l中移除入一个节点n

参数
l单向链表的链表头
n将要被移除的节点
rt_inline rt_slist_t* rt_slist_first(rt_slist_tl)

获取单向链表的第一个节点

参数
l单向链表的链表头
rt_inline rt_slist_t* rt_slist_next(rt_slist_tn)

获取单向链表节点n的下一个节点

参数
n单向链表的节点
rt_inline int rt_slist_isempty(rt_slist_tl)

判断单向链表是否为空

参数
l单向链表的链表头