c语言队列的结构体怎么写
时间: 2024-10-14 17:05:00 浏览: 9
在C语言中,队列(Queue)通常可以使用数组或链表来实现。这里我将展示一个基于数组的简单队列结构体的例子,以及它的一些基本操作函数:
```c
#include <stdio.h>
#define MAX_SIZE 10 // 队列最大容量
typedef struct {
int data[MAX_SIZE]; // 存储队列元素
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void init_queue(Queue *q) {
q->front = -1;
q->rear = -1;
}
// 判断队列是否为空
int is_empty(Queue *q) {
return (q->front == -1 && q->rear == -1);
}
// 判断队列是否已满
int is_full(Queue *q) {
if ((q->rear + 1) % MAX_SIZE == q->front) {
return 1; // 已满
}
return 0; // 还有空间
}
// 入队(enqueue)
void enqueue(Queue *q, int value) {
if (is_full(q)) {
printf("Queue is full.\n");
return;
}
if (is_empty(q)) {
q->front = 0;
q->rear = 0;
} else {
q->rear = (q->rear + 1) % MAX_SIZE; // 根据循环队列特性更新后指针
}
q->data[q->rear] = value;
}
// 出队(dequeue)
int dequeue(Queue *q) {
if (is_empty(q)) {
printf("Queue is empty.\n");
return -1; // 返回错误值
}
int removed_value = q->data[q->front];
if (q->front == q->rear) { // 如果队列只剩下一个元素
q->front = -1;
q->rear = -1;
} else {
q->front = (q->front + 1) % MAX_SIZE; // 更新队头指针
}
return removed_value;
}
// 打印队列内容
void print_queue(Queue *q) {
if (is_empty(q)) {
printf("Queue is empty.\n");
} else {
for (int i = 0; i <= q->rear; i++) {
printf("%d ", q->data[i]);
}
printf("\n");
}
}
```
这是一个基础的队列实现,你可以根据需要添加更多的功能。
阅读全文