C语言队列头文件
时间: 2025-05-11 21:20:53 浏览: 18
### C语言实现队列数据结构的头文件示例
在C语言中,可以通过自定义头文件来封装队列的数据结构及其基本操作。下面是一个简单的循环队列头文件 `LQueue.h` 的设计示例[^2]。
#### LQueue.h
此头文件定义了一个基于数组的循环队列,并提供了初始化、入队、出队等功能的接口声明。
```c
#ifndef LQUEUE_H
#define LQUEUE_H
#include <stdbool.h>
#include <stdint.h>
// 定义队列的最大容量
#define QUEUE_MAX_SIZE 10
typedef struct {
uint8_t data[QUEUE_MAX_SIZE]; // 队列存储空间
int front; // 队首指针
int rear; // 队尾指针
} Queue;
/// 初始化队列
void queue_init(Queue *q);
/// 判断队列是否为空
bool is_queue_empty(const Queue *q);
/// 判断队列是否已满
bool is_queue_full(const Queue *q);
/// 入队操作
bool enqueue(Queue *q, uint8_t value);
/// 出队操作
bool dequeue(Queue *q, uint8_t *value);
#endif /* LQUEUE_H */
```
上述代码展示了如何通过宏定义和结构体创建一个固定大小的循环队列。其中,`queue_init` 用于初始化队列;`is_queue_empty` 和 `is_queue_full` 分别判断队列是否为空或已满;`enqueue` 和 `dequeue` 是核心的操作函数,分别完成元素的入队和出队功能。
---
为了进一步扩展队列的功能,可以考虑增加动态内存分配支持或其他高级特性。例如,在某些嵌入式开发场景下,还可以结合 STM32F1xx HAL 库中的外设驱动程序(如定时器中断处理),利用队列管理事件或消息传递[^1]。
以下是部分辅助说明:
- **队列初始化**:设置 `front` 和 `rear` 指针初始位置为 `-1` 表示空状态。
- **边界条件检测**:当 `(rear + 1) % QUEUE_MAX_SIZE == front` 时表示队列为满,而 `front == rear` 则表示队列为空。
- **线程安全**:如果需要多线程环境下的安全性,则需引入互斥锁机制。
---
### 示例代码片段
以下是一些典型函数的具体实现方式:
#### 初始化队列
```c
void queue_init(Queue *q) {
q->front = -1;
q->rear = -1;
}
```
#### 判断队列是否为空
```c
bool is_queue_empty(const Queue *q) {
return (q->front == -1);
}
```
#### 判断队列是否已满
```c
bool is_queue_full(const Queue *q) {
return ((q->rear + 1) % QUEUE_MAX_SIZE == q->front);
}
```
#### 元素入队
```c
bool enqueue(Queue *q, uint8_t value) {
if (is_queue_full(q)) {
return false; // 如果队列已满则无法继续加入新元素
}
if (is_queue_empty(q)) { // 若当前队列为空,则更新前后指针
q->front = 0;
q->rear = 0;
} else { // 否则仅移动队尾指针到下一个可用位置
q->rear = (q->rear + 1) % QUEUE_MAX_SIZE;
}
q->data[q->rear] = value; // 将值写入指定索引处
return true;
}
```
#### 元素出队
```c
bool dequeue(Queue *q, uint8_t *value) {
if (is_queue_empty(q)) {
return false; // 当前无任何有效数据可供移除
}
*value = q->data[q->front];
if (q->front == q->rear) { // 只有一个元素存在时重置整个队列状态
q->front = -1;
q->rear = -1;
} else { // 正常情况下向前推进一位即可
q->front = (q->front + 1) % QUEUE_MAX_SIZE;
}
return true;
}
```
以上实现了基础版本的静态数组型循环队列逻辑。
---
阅读全文
相关推荐



















