📄 hal_llist.h
字号:
#ifndef __HAL_LIST_H__
#define __HAL_LIST_H__
#include "hal_types.h"
/*
* hal_llist.h 用于链表操作的结构和函数
*
* 注意:一个链表如果只包含头结点,则为空链表
*/
typedef struct hal_llist_s hal_llist;
struct hal_llist_s
{
hal_llist* next; /* 指向链表下一结点的指针 */
hal_llist* previous; /* 指向链表中前一结点的指针 */
};
/*
* HAL_LLIST_HEAD 用于创建一个新链表的头结点,头结点中的指针被初始化为指向
* 头结点本身,从而表明为一个空链表。
*/
#define HAL_LLIST_HEAD(head) hal_llist head = {&head, &head}
/*
* hal_llist_insert() 函数将entry作为链表的第一个结点插入到list链表中,
* 注意:list为链表的头结点,而entry是插入到头结点后面的
*/
static void hal_llist_insert(hal_llist* list, hal_llist* entry)
{
entry->previous = list;
entry->next = list->next;
list->next->previous = entry;
list->next = entry;
}
/*
* hal_llist_remove() 函数用于将entry结点从它所在的链表中删除
*/
static void hal_llist_remove(hal_llist* entry)
{
entry->next->previous = entry->previous;
entry->previous->next = entry->next;
/*
* 将entry指向其自身, 避免以后误用hal_llist_remove()再次操作entry时会造成的损害
*/
entry->previous = entry;
entry->next = entry;
}
#endif /* __HAL_LLIST_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -