stdlist.h#

stdlist.hX2W-OS的标准链表实现

待办事项:

  1. 测试stdlist库

Author

Shihong Wang (jack4shihong@gmail.com)

Version

0.1

Date

2023-04-12

Copyright

Copyright Shihong Wang (c) 2023 with GNU Public License V3.0

Typedefs

typedef struct __list_elem_t list_elem_t#

list_elem_t是链表节点结构体

Note

list_elem_t需要作为结构体的成员, 而后通过member2struct宏获得指向结构体的指针

typedef struct __list_t list_t#

list_t是链表结构体

Bool() list_walking_func_t (list_elem_t *elem_ptr, int arg)

list_walking_func_t是自定义函数类型, 用于在链表遍历函数list_walking中作为回调函数

Param elem:

链表节点指针

Param arg:

参数

Functions

void list_init(list_t *list_ptr)#

list_init用于初始化list_ptr指向的链表

Parameters:

list_ptr – 指向需要初始化的链表的指针

void list_insert(list_elem_t *before_ptr, list_elem_t *add_ptr)#

list_insert用于在before_ptr指向的节点前插入add_ptr指向的节点

Warning

在实现锁或者中断之后需要保护一下

Parameters:
  • before_ptr – 指向链表中被插入的节点的指针

  • add_ptr – 指向要插入到链表中的节点的指针

void list_append(list_elem_t *elem_ptr, list_t *list_ptr)#

list_append用于将elem_ptr指向的节点添加到list_ptr指向的链表后面

Parameters:
  • elem_ptr – 指向要添加的节点的指针

  • list_ptr – 指向被添加的链表的指针

void list_remove(list_elem_t *elem_ptr)#

list_remove用于将elem_ptr指向的节点从在其所在的链表中删除

Parameters:

elem_ptr – 指向要删除的节点的指针

void list_push(list_elem_t *elem_ptr, list_t *list_ptr)#

list_push将链表视为一个栈, 用于向list_ptr指向的链表头前(栈顶)压入elem_ptr指向的节点

Parameters:
  • elem_ptr – 指向要被压入的节点的指针

  • list_ptr – 指向要被压入的链表的指针

list_elem_t *list_pop(list_t *list_ptr)#

list_pop将链表视为一个栈, 用于向list_ptr指向的链表头前(栈顶)弹出一个节点

Parameters:

list_ptr – 指向要被弹出的链表的指针

Returns:

list_elem_t 指向被弹出的节点的指针

Bool list_empty(list_t *list_ptr)#

list_empty用于判断list_ptr指向的链表是否为空

Parameters:

list_ptr – 指向被判断的链表的指针

Returns:

True 链表为空

Returns:

False 链表不为空

size_t list_size(list_t *list_ptr)#

list_size用于计算list_ptr指向的链表的长度(元素个数)

Parameters:

list_ptr – 被计算长度的链表

Returns:

size_t 链表的长度(元素个数)

Bool list_search(list_elem_t *elem_ptr, list_t *list_ptr)#

list_search用于在list_ptr指向的链表中查找是否存在elem_ptr指向的节点

Parameters:
  • elem_ptr – 指向被查找的节点的指针

  • list_ptr – 指向被查找的链表的指针

Returns:

True elem_ptr指向的节点在list_ptr指向的链表中

Returns:

False elem_ptr指向的节点不在list_ptr指向的链表中

list_elem_t *list_walking(list_t *list_ptr, list_walking_func_t func, int arg)#

list_walking用于遍历list_ptr指向的链表, 并对每一个节点调用func判断是否继续遍历

Parameters:
  • list_ptr – 指向要遍历的链表的指针

  • func – 将应用在每一个节点上的函数

  • arg – 传给func的参数

Returns:

list_elem_t* 若将func应用在当前节点后返回值为True, 则停止遍历, 且返回指向当前节点的指针, 否则继续遍历; 若将func应用于链表中所有元素后, 没有一个节点返回True, 则返回NULL

struct __list_elem_t#
#include <stdlist.h>

list_elem_t是链表节点结构体

Note

list_elem_t需要作为结构体的成员, 而后通过member2struct宏获得指向结构体的指针

Public Members

struct __list_elem_t *prev#

指向上一个链表节点的指针

struct __list_elem_t *next#

指向下一个链表节点的指针

struct __list_t#
#include <stdlist.h>

list_t是链表结构体

Public Members

list_elem_t head#

链表头结点, 仅标记用, 第一个节点是head->next

list_elem_t tail#

链表尾结点, 仅标记用, 最后一个节点是tail->prev