使用c语言 设计循环队列
时间: 2024-12-28 22:38:50 浏览: 7
在C语言中设计一个循环队列,你需要创建两个数组来存储数据,一个是存放元素的实际数组,另一个用于索引管理。由于循环队列的特点是当队列满时,下标会从头开始重置,而不会溢出,所以需要维护一个“尾指针”指向最后一个添加的元素的位置,以及一个“头指针”指示队首。
下面是一个简单的循环队列结构体定义及基本操作的示例:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int *queue; // 存放元素的数组
int front; // 队首位置
int rear; // 队尾位置
int size; // 队列实际大小
} CircularQueue;
// 初始化循环队列
void init(CircularQueue *cq) {
cq->queue = (int*)malloc(MAX_SIZE * sizeof(int));
if (!cq->queue) {
printf("Memory allocation failed.\n");
return;
}
cq->front = -1;
cq->rear = -1;
cq->size = 0;
}
// 添加元素到队尾
void enqueue(CircularQueue *cq, int value) {
if (cq->size == MAX_SIZE) {
printf("Queue is full.\n");
return;
}
if (cq->rear == -1) {
cq->rear = 0;
} else {
cq->rear = (cq->rear + 1) % MAX_SIZE; // 循环更新
}
cq->queue[cq->rear] = value;
cq->size++;
}
// 从队首删除元素
int dequeue(CircularQueue *cq) {
if (cq-1) {
printf("Queue is empty.\n");
return -1;
}
int value = cq->queue[cq->front];
if (cq->front == cq->rear) { // 如果队列仅剩一个元素,更新头尾指针
cq->front = -1;
cq->rear = -1;
} else {
cq->front = (cq->front + 1) % MAX_SIZE; // 循环更新
}
cq->size--;
return value;
}
// 检查队列是否为空
int isEmpty(CircularQueue *cq) {
return cq->front == -1;
}
// 检查队列是否已满
int isFull(CircularQueue *cq) {
return cq->size == MAX_SIZE;
}
// 释放内存
void destroy(CircularQueue *cq) {
free(cq->queue);
cq->queue = NULL;
cq->front = -1;
cq->rear = -1;
cq->size = 0;
}
```
阅读全文