双链接列表
在许多方面与单链接列表类似,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()
将一个节点添加到列表