文章目录
双向链表的基本概念
双向链表也叫双链表,是链表的一种,是在操作系统中常用的数据结构,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱,其头指针 head 是唯一确定的。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点,这种数据结构形式使得双向链表在查找时更加方便,特别是大量数据的遍历。由于双向链表具有对称性,能方便地完成各种插入、删除等操作,但需要注意前后方向的操作。
双向链表的函数接口讲解
rt_list_node结构体
/**
* Double List structure
*/
struct rt_list_node
{
struct rt_list_node *next; /**< 指向下一个节点的指针(后驱) */
struct rt_list_node *prev; /**< 指向上一个节点的指针(前驱) */
};
typedef struct rt_list_node rt_list_t; /**< Type for lists. */
常用的宏定义
/* 获取type结构体中member成员在这个结构体中的偏移 */
#define rt_container_of(ptr, type, member) ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))
/* 初始化链表对象 */
#define RT_LIST_OBJECT_INIT(object) { &(object), &(object) }
/* 获取结构体变量的地址 */
#define rt_list_entry(node, type, member) rt_container_of(node, type, member)
/* 遍历链表 */
#define rt_list_for_each(pos, head) for (pos = (head)->next; pos != (head); pos = pos->next)
/* 安全地遍历链表 */
#define rt_list_for_each_safe(pos, n, head)
/* 循环遍历head链表中每一个pos中的member成员 */
#define rt_list_for_each_entry(pos, head, member)
#define

本文深入讲解双向链表的概念、rt_list_node结构体、常用宏定义及函数接口,如rt_list_init初始化、rt_list_insert_after与rt_list_insert_before插入、rt_list_remove删除节点,以及链表节点元素的访问方法。
最低0.47元/天 解锁文章
819





