HW_Lib/lib/inc/list/queue.h

112 lines
3.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#ifndef HW_LIB_QUEUE_H
#define HW_LIB_QUEUE_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief 双向链表节点结构体
*/
typedef struct Queue_Node_t {
void *val; // 节点值
struct Queue_Node_t *next; // 后继节点
struct Queue_Node_t *prev; // 前驱节点
} Queue_Node_t;
/**
* @brief 双端队列结构体
*/
typedef struct {
Queue_Node_t *front, *rear; // 头节点 front ,尾节点 rear
int queSize; // 双向队列的长度
size_t typeSize; // 元素类型的大小
} Queue_List_t;
/**
* @brief 创建一个新的双端队列
* @param typeSize: [输入] 元素类型的大小
* @return Queue_List_t* 返回新创建的双端队列指针
* @example deque = newQueue_List(sizeof(int));
*/
extern Queue_List_t *newQueue_List(unsigned char size);
/**
* @brief 销毁双端队列
* @param deque: [输入] 双端队列指针
* @return void
* @example delQueue_List(deque);
*/
extern void delQueue_List(Queue_List_t *deque);
/**
* @brief 获取队列大小
* @param deque: [输入] 双端队列指针
* @return int 返回队列中元素个数
* @example size = queue_size(deque);
*/
extern int queue_size(Queue_List_t *deque);
/**
* @brief 检查队列是否为空
* @param deque: [输入] 双端队列指针
* @return bool 若队列为空返回true否则返回false
* @example if (queue_is_empty(deque)) { // do something }
*/
extern bool queue_is_empty(Queue_List_t *deque);
/**
* @brief 在队列头部插入元素
* @param deque: [输入] 双端队列指针
* @param data: [输入] 待插入的数据指针
* @return void
* @example pushFirst(deque, newData);
*/
extern void pushFirst(Queue_List_t *deque, void *data);
/**
* @brief 在队列尾部插入元素
* @param deque: [输入] 双端队列指针
* @param data: [输入] 待插入的数据指针
* @return void
* @example pushLast(deque, newData);
*/
extern void pushLast(Queue_List_t *deque, void *data);
/**
* @brief 获取队列头部元素但不移除
* @param deque: [输入] 双端队列指针
* @return void* 返回队列头部元素的指针若队列为空返回NULL
* @example firstData = peekFirst(deque);
*/
extern void *peekFirst(Queue_List_t *deque);
/**
* @brief 获取队列尾部元素但不移除
* @param deque: [输入] 双端队列指针
* @return void* 返回队列尾部元素的指针若队列为空返回NULL
* @example lastData = peekLast(deque);
*/
extern void *peekLast(Queue_List_t *deque);
/**
* @brief 弹出队列头部元素
* @param deque: [输入] 双端队列指针
* @return void* 返回被弹出的头部元素的指针若队列为空返回NULL
* @example poppedData = popFirst(deque);
*/
extern void *popFirst(Queue_List_t *deque);
/**
* @brief 弹出队列尾部元素
* @param deque: [输入] 双端队列指针
* @return void* 返回被弹出的尾部元素的指针若队列为空返回NULL
* @example poppedData = popLast(deque);
*/
extern void *popLast(Queue_List_t *deque);
#ifdef __cplusplus
}
#endif
#endif //HW_LIB_QUEUE_H