component/inc/clist.h

50 lines
1.7 KiB
C

/**
* @file clist.h
* @author xxx
* @date 2023-08-08 23:18:15
* @brief 简单链表 使用方法 lib\examples\simple_clist.c
* @copyright Copyright (c) 2023 by xxx, All Rights Reserved.
*/
#ifndef __CLIST_H
#define __CLIST_H
#include "lib.h"
typedef void *cnode;
/// 链表中一个节点的结构体
typedef struct CLIST_NODE
{
cnode data; /// 值
struct CLIST_NODE *next; /// 指向下一个结点
} clist_node_t;
void clist_init(clist_node_t **ppFirst); ///< 初始化 ,构造一条空的链表
void clist_print(clist_node_t *First); ///< 打印链表
uint32_t clist_node_count(clist_node_t *First); ///< 获取链表节点数
void clist_push_back(clist_node_t **ppFirst, cnode data); ///< 尾部插入
void clist_push_front(clist_node_t **ppFirst, cnode data); ///< 头部插入
void clist_pop_back(clist_node_t **ppFirst); ///< 尾部删除
void clist_pop_front(clist_node_t **ppFirst); ///< 头部删除
void clist_insert_for_node(clist_node_t **ppFirst, clist_node_t *pPos, cnode data); ///< 给定结点插入,插入到结点前
int32_t clist_insert(clist_node_t **ppFirst, int32_t Pos, cnode data); ///< 按位置插入
void clist_erase_for_node(clist_node_t **ppFirst, clist_node_t *pPos); ///< 给定结点删除
void clist_remove(clist_node_t **ppFirst, cnode data); ///< 按值删除,只删遇到的第一个
void clist_remove_all(clist_node_t **ppFirst, cnode data); ///< 按值删除,删除所有的
void clist_destroy(clist_node_t **ppFirst); ///< 销毁 ,需要销毁每一个节点
clist_node_t *clist_find(clist_node_t *pFirst, cnode data); ///< 按值查找,返回第一个找到的结点指针,如果没找到,返回 NULL
#endif //__CLIST_H