HW_Lib/lib/inc/list/queue.h

112 lines
3.2 KiB
C
Raw Normal View History

2024-06-21 07:21:42 +00:00
#pragma once
2024-06-21 05:25:07 +00:00
#ifndef HW_LIB_QUEUE_H
#define HW_LIB_QUEUE_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief
*/
2024-06-21 07:21:42 +00:00
typedef struct Queue_Node_t {
2024-06-21 05:25:07 +00:00
void *val; // 节点值
2024-06-21 07:21:42 +00:00
struct Queue_Node_t *next; // 后继节点
struct Queue_Node_t *prev; // 前驱节点
} Queue_Node_t;
2024-06-21 05:25:07 +00:00
/**
* @brief
*/
typedef struct {
2024-06-21 07:21:42 +00:00
Queue_Node_t *front, *rear; // 头节点 front ,尾节点 rear
2024-06-21 05:25:07 +00:00
int queSize; // 双向队列的长度
2024-06-21 07:21:42 +00:00
size_t typeSize; // 元素类型的大小
} Queue_List_t;
2024-06-21 05:25:07 +00:00
/**
* @brief
2024-06-21 07:21:42 +00:00
* @param typeSize: []
* @return Queue_List_t*
* @example deque = newQueue_List(sizeof(int));
2024-06-21 05:25:07 +00:00
*/
2024-06-21 07:21:42 +00:00
extern Queue_List_t *newQueue_List(unsigned char size);
2024-06-21 05:25:07 +00:00
/**
* @brief
* @param deque: []
* @return void
2024-06-21 07:21:42 +00:00
* @example delQueue_List(deque);
2024-06-21 05:25:07 +00:00
*/
2024-06-21 07:21:42 +00:00
extern void delQueue_List(Queue_List_t *deque);
2024-06-21 05:25:07 +00:00
/**
* @brief
* @param deque: []
* @return int
* @example size = queue_size(deque);
*/
2024-06-21 07:21:42 +00:00
extern int queue_size(Queue_List_t *deque);
2024-06-21 05:25:07 +00:00
/**
* @brief
* @param deque: []
* @return bool truefalse
* @example if (queue_is_empty(deque)) { // do something }
*/
2024-06-21 07:21:42 +00:00
extern bool queue_is_empty(Queue_List_t *deque);
2024-06-21 05:25:07 +00:00
/**
* @brief
* @param deque: []
* @param data: []
* @return void
* @example pushFirst(deque, newData);
*/
2024-06-21 07:21:42 +00:00
extern void pushFirst(Queue_List_t *deque, void *data);
2024-06-21 05:25:07 +00:00
/**
* @brief
* @param deque: []
* @param data: []
* @return void
* @example pushLast(deque, newData);
*/
2024-06-21 07:21:42 +00:00
extern void pushLast(Queue_List_t *deque, void *data);
2024-06-21 05:25:07 +00:00
/**
* @brief
* @param deque: []
* @return void* NULL
* @example firstData = peekFirst(deque);
*/
2024-06-21 07:21:42 +00:00
extern void *peekFirst(Queue_List_t *deque);
2024-06-21 05:25:07 +00:00
/**
* @brief
* @param deque: []
* @return void* NULL
* @example lastData = peekLast(deque);
*/
2024-06-21 07:21:42 +00:00
extern void *peekLast(Queue_List_t *deque);
2024-06-21 05:25:07 +00:00
/**
* @brief
* @param deque: []
* @return void* NULL
* @example poppedData = popFirst(deque);
*/
2024-06-21 07:21:42 +00:00
extern void *popFirst(Queue_List_t *deque);
2024-06-21 05:25:07 +00:00
/**
* @brief
* @param deque: []
* @return void* NULL
* @example poppedData = popLast(deque);
*/
2024-06-21 07:21:42 +00:00
extern void *popLast(Queue_List_t *deque);
2024-06-21 05:25:07 +00:00
#ifdef __cplusplus
}
#endif
#endif //HW_LIB_QUEUE_H