使用C语言模拟出容器Queue,包含insert,del函数等,实现消息队列功能
时间: 2024-10-22 21:05:27 浏览: 62
在C语言中,我们可以使用数组或链表作为数据结构来模拟一个简单的队列(Queue),它遵循先进先出(First In First Out, FIFO)的原则。这里我将简述如何使用数组实现一个基本的队列,并提供`insert`(入队)和`del`(出队)操作。
```c
#include <stdio.h>
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void init(Queue* q) {
q->front = -1;
q->rear = -1;
}
// 插入元素到队尾 (enqueue)
void insert(Queue* q, int value) {
if ((q->rear + 1) % MAX_SIZE == q->front) { // 判断队满
printf("Queue is full.\n");
return;
}
q->rear = (q->rear + 1) % MAX_SIZE; // 循环数组
q->data[q->rear] = value;
if (q->front == -1) {
q->front = q->rear; // 如果队空,同时更新front
}
printf("Inserted %d into the queue.\n", value);
}
// 删除并返回队首元素 (dequeue)
int del(Queue* q) {
if (q->front == -1) { // 队空
printf("Queue is empty.\n");
return -1; // 返回错误值
}
int value = q->data[q->front]; // 获取队首元素
q->front = (q->front + 1) % MAX_SIZE; // 更新front
if (q->front == q->rear) { // 队列变为空
q->front = q->rear = -1;
}
printf("Deleted element from queue: %d\n", value);
return value;
}
int main() {
Queue myQueue;
init(&myQueue);
insert(&myQueue, 1);
insert(&myQueue, 2);
insert(&myQueue, 3);
while (!isQueueEmpty(&myQueue)) {
int removedValue = del(&myQueue);
printf("Removed: %d\n", removedValue);
}
return 0;
}
// 辅助函数:检查队列是否为空
int isQueueEmpty(Queue* q) {
return q->front == -1 && q->rear == -1;
}
```
这个程序定义了一个名为`Queue`的结构体,包含一个数组、两个指针表示队首(front)和队尾(rear)。通过`init`函数初始化队列,`insert`用于添加元素到队尾,`del`用于删除并返回队首元素。注意,这里我们使用了循环数组的方式,当队尾等于队头加一除以数组大小的余数时,表示队列已满;同样地,当队头等于队尾时,表示队列为空。
阅读全文