HW_Lib/lib/inc/list/list.h

150 lines
4.4 KiB
C
Raw Normal View History

2024-06-21 07:21:42 +00:00
#pragma once
2024-06-21 05:25:01 +00:00
#ifndef HW_LIB_LIST_H
#define HW_LIB_LIST_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdbool.h>
2024-06-21 07:21:42 +00:00
typedef struct List_Node_t { //节点结构
2024-06-21 05:25:01 +00:00
void *data;
2024-06-21 07:21:42 +00:00
struct List_Node_t *next;
} List_Node_t;
2024-06-21 05:25:01 +00:00
typedef struct { //链表结构
2024-06-22 03:08:31 +00:00
List_Node_t *head;
List_Node_t *tail;
2024-06-21 05:25:01 +00:00
long len;
2024-06-21 07:21:42 +00:00
} List_t;
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @return void
2024-06-21 07:21:42 +00:00
* @example list_init(&myList_t);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void list_init(List_t *list);
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @return bool truefalse
2024-06-21 07:21:42 +00:00
* @example if (list_is_empty(&myList_t)) { // do something }
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern bool list_is_empty(List_t *list);
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @param data: []
* @return void
2024-06-21 07:21:42 +00:00
* @example list_insert(&myList_t, newData);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void list_insert(List_t *list, void *data);
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @param data: []
* @return void
2024-06-21 07:21:42 +00:00
* @example list_insert_at_head(&myList_t, newData);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void list_insert_at_head(List_t *list, void *data);
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @param data: []
* @return void
2024-06-21 07:21:42 +00:00
* @example list_insert_at_tail(&myList_t, newData);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void list_insert_at_tail(List_t *list, void *data);
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @param data: []
* @param idx: []
* @return void
2024-06-21 07:21:42 +00:00
* @example list_insert_at_index(&myList_t, newData, 2);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void list_insert_at_index(List_t *list, void *data, long idx);
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @param key: []
* @param compare: []
* @return void* NULL
2024-06-21 07:21:42 +00:00
* @example deletedData = list_delete(&myList_t, keyData, compareFunc);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void *list_delete(List_t *list, void *key, int (*compare)(const void *, const void *));
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @param key: []
* @param compare: []
* @return void* NULL
2024-06-21 07:21:42 +00:00
* @example foundData = list_search(&myList_t, keyData, compareFunc);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void *list_search(List_t *list, void *key, int (*compare)(const void *, const void *));
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @param compare: []
* @return void
2024-06-21 07:21:42 +00:00
* @example list_sort(&myList_t, compareFunc);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void list_sort(List_t *list, int (*compare)(const void *, const void *));
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @param handle: []
* @return void
2024-06-21 07:21:42 +00:00
* @example list_traverse(&myList_t, handleFunc);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void list_traverse(List_t *list, void (*handle)(void *));
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @return void
2024-06-21 07:21:42 +00:00
* @example list_reverse(&myList_t);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void list_reverse(List_t *list);
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @return long
2024-06-21 07:21:42 +00:00
* @example length = list_get_lenth(&myList_t);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern long list_get_lenth(List_t *list);
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @param idx: []
* @return void* NULL
2024-06-21 07:21:42 +00:00
* @example element = list_get_element(&myList_t, 3);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void *list_get_element(List_t *list, int idx);
2024-06-21 05:25:01 +00:00
/**
* @brief
* @param list: []
* @param destroy: []
* @return void
2024-06-21 07:21:42 +00:00
* @example list_destroy(&myList_t, destroyFunc);
2024-06-21 05:25:01 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void list_destroy(List_t *list, void (*destroy)(void *data));
2024-06-21 05:25:01 +00:00
#ifdef __cplusplus
}
#endif
#endif //HW_LIB_LIST_H