双链接列表
在许多方面与单链接列表类似,Zephyr包含了一个双链接实现。这为所有现有的slist操作提供了相同的算法行为,但也允许固定时间的删除和插入(在所有点上:在头部、尾部或任何内部节点之前或之后)。为此,该列表为每个节点存储两个指针,因此需要更高的运行时代码和内存空间。
sys_dlist_t结构可以由用户在任何可访问的内存中实例化。在使用之前必须用sys_dlist_init()或SYS_DLIST_STATIC_INIT初始化。用户应该为添加到列表中的任何节点提供sys_dnode_t结构体(通常嵌入在要跟踪的结构体中,如上所述)。它必须在zeroed/bss内存或sys_dnode_init()中初始化。
原始操作可以检索列表的头/尾和具有sys_dlist_peek_head()、sys_dlist_peek_tail()、sys_dlist_peek_next()和sys_dlist_peek_prev()节点的next/prev指针。这些节点都可以在适当的地方返回NULL(例如,对于空列表,或列表端点处的节点)。
可以使用sys_dlist_remove()删除一个节点,使用sys_dlist_prepend()和sys_dlist_append()将一个节点添加到列表
Zephyr操作系统中的双链表详解
本文介绍了Zephyr内核中的双链接列表,它在操作上类似于单链表,但支持更快的删除和插入。双链表每个节点包含两个指针,需要更多内存。初始化后,用户可以通过特定操作添加、删除或遍历节点。文章详细阐述了双链表的内部结构和操作原理,展示了其在不同情况下的表现形态。
订阅专栏 解锁全文
389

被折叠的 条评论
为什么被折叠?



