请用c语言实现循环队列存储消息
时间: 2023-11-25 14:05:02 浏览: 38
循环队列的实现可以使用数组和指针。
首先需要定义一个队列结构体,包含队列的大小和当前的队列元素个数,以及队列的头尾指针:
```c
#define MAX_QUEUE_SIZE 100
typedef struct {
int size; // 队列大小
int count; // 队列元素个数
int front; // 队列头指针
int rear; // 队列尾指针
int *data; // 队列数据
} Queue;
```
然后实现队列的初始化函数,将队列的大小和数据空间申请出来:
```c
void init_queue(Queue *q, int size) {
q->size = size;
q->count = 0;
q->front = 0;
q->rear = 0;
q->data = (int *)malloc(sizeof(int) * size);
}
```
队列的入队操作需要先检查队列是否已满,如果已满则返回错误码,否则将元素添加到队列尾部,同时更新队列尾指针和元素个数:
```c
int enqueue(Queue *q, int value) {
if (q->count == q->size) {
return -1; // 队列已满
}
q->data[q->rear] = value;
q->rear = (q->rear + 1) % q->size;
q->count++;
return 0;
}
```
队列的出队操作也需要先检查队列是否为空,如果为空则返回错误码,否则将队列头部元素弹出,同时更新队列头指针和元素个数:
```c
int dequeue(Queue *q, int *value) {
if (q->count == 0) {
return -1; // 队列为空
}
*value = q->data[q->front];
q->front = (q->front + 1) % q->size;
q->count--;
return 0;
}
```
完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 100
typedef struct {
int size; // 队列大小
int count; // 队列元素个数
int front; // 队列头指针
int rear; // 队列尾指针
int *data; // 队列数据
} Queue;
void init_queue(Queue *q, int size) {
q->size = size;
q->count = 0;
q->front = 0;
q->rear = 0;
q->data = (int *)malloc(sizeof(int) * size);
}
int enqueue(Queue *q, int value) {
if (q->count == q->size) {
return -1; // 队列已满
}
q->data[q->rear] = value;
q->rear = (q->rear + 1) % q->size;
q->count++;
return 0;
}
int dequeue(Queue *q, int *value) {
if (q->count == 0) {
return -1; // 队列为空
}
*value = q->data[q->front];
q->front = (q->front + 1) % q->size;
q->count--;
return 0;
}
int main() {
Queue q;
init_queue(&q, MAX_QUEUE_SIZE);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
int value;
dequeue(&q, &value);
printf("%d\n", value);
dequeue(&q, &value);
printf("%d\n", value);
dequeue(&q, &value);
printf("%d\n", value);
return 0;
}
```