c 代码实现数据结构:循环队列
时间: 2024-12-11 17:16:15 浏览: 30
好的,我很乐意为您介绍如何使用C语言实现循环队列这种数据结构。
循环队列是一种特殊的队列结构,它的特点是队头和队尾相连,形成一个环状结构。这样可以有效地利用数组空间,避免"假溢出"的问题。下面是一个简单的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} CircularQueue;
// 初始化队列
void initQueue(CircularQueue *q) {
q->front = 0;
q->rear = 0;
}
// 判断队列是否为空
int isEmpty(CircularQueue *q) {
return q->front == q->rear;
}
// 判断队列是否为满
int isFull(CircularQueue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 入队操作
int enqueue(CircularQueue *q, int value) {
if (isFull(q)) {
printf("Queue is full\n");
return -1;
}
q->data[q->rear] = value;
q->rear = (q->rear + 1) % MAX_SIZE;
return 0;
}
// 出队操作
int dequeue(CircularQueue *q, int *value) {
if (isEmpty(q)) {
printf("Queue is empty\n");
return -1;
}
*value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return 0;
}
// 获取队列长度
int queueLength(CircularQueue *q) {
return (q->rear - q->front + MAX_SIZE) % MAX_SIZE;
}
// 打印队列
void printQueue(CircularQueue *q) {
if (isEmpty(q)) {
printf("Queue is empty\n");
return;
}
int i = q->front;
while (i != q->rear) {
printf("%d ", q->data[i]);
i = (i + 1) % MAX_SIZE;
}
printf("\n");
}
int main() {
CircularQueue q;
initQueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
printQueue(&q);
int value;
dequeue(&q, &value);
printf("Dequeued: %d\n", value);
printQueue(&q);
printf("Queue length: %d\n", queueLength(&q));
return 0;
}
```
这个实现包含了以下主要功能:
1. 初始化队列
2. 判断队列是否为空
3. 判断队列是否为满
4. 入队操作
5. 出队操作
6. 获取队列长度
7. 打印队列
循环队列的主要优点是:
1. 避免了普通队列的"假溢出"问题
2. 提高了空间利用率
3. 实现了高效的入队和出队操作,时间复杂度都是O(1)
阅读全文