单链列表
Zephyr提供了一种sys_slist_t
类型,用于存储简单的单链列表数据(即,每个列表元素存储一个指向下一个元素的指针,而不是指向上一个元素的指针)。这支持持续时间访问列表的第一个(头部)和最后一个(尾部)元素,插入到列表的头部之前和尾部之后,以及持续时间删除头部。删除后续节点需要访问“前一个”指针,因此只能通过搜索列表在线性时间内执行。
sys_slist_t
结构可以由用户在任何可访问的内存中进行实例化。在使用之前应该用sys_slist_init()
或SYS_SLIST_STATIC_INIT
的静态分配来初始化。它的内部字段是不透明的,不应该被用户代码访问。
列表的结束节点可以使用sys_slist_peek_head()
和sys_slist_peek_tail()
检索,如果列表为空,则将返回NULL
,否则返回指向sys_snode_t
结构的指针。
sys_snode_t
结构体表示要插入的数据。通常,它应该由用户分配/控制,通常嵌入在要添加到列表中的结构体中。容器结构指针可以使用SYS_SLIST_CONTAINER
从列表节点中检索,并将其传递给包含结构的结构名和节点的字段名。在内部,sys_snode_t
结构只包含下一个指针,可以使用sys_slist_peek_next()
访问它。
可以通过在具有sys_slist_prepend()
和sys_slist_append()
的头部或尾