写一个数据结构循环队列的顺序表示和实现C语言
时间: 2024-10-09 21:10:21 浏览: 43
循环队列是一种特殊的线性表,它在队列的一端添加元素,在另一端删除元素,当一端满时,元素会从队首开始存入,形成一个环形结构。以下是循环队列的顺序表示和C语言的基本实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义循环队列的结构体
typedef struct {
int* queue; // 存储元素的数组
int front; // 队头指针
int rear; // 队尾指针
int capacity; // 队列容量
} Queue;
// 初始化循环队列
Queue* createQueue(int capacity) {
Queue* q = (Queue*)malloc(sizeof(Queue));
q->queue = (int*)malloc(capacity * sizeof(int));
q->front = -1;
q->rear = -1;
q->capacity = capacity;
return q;
}
// 判断队列是否为空
int isEmpty(Queue* q) {
return q->front == -1;
}
// 判断队列是否已满
int isFull(Queue* q) {
return (q->rear + 1) % q->capacity == q->front;
}
// 入队操作
void enqueue(Queue* q, int value) {
if (isFull(q)) {
printf("Queue is full.\n");
return;
}
if (isEmpty(q)) {
q->front = 0;
} else {
q->rear = (q->rear + 1) % q->capacity;
}
q->queue[q->rear] = value;
}
// 出队操作
int dequeue(Queue* q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
return -1; // 或者抛出错误
}
int value = q->queue[q->front];
if (q->front == q->rear) {
free(q->queue);
free(q);
return value;
} else {
q->front = (q->front + 1) % q->capacity;
return value;
}
}
// 删除队列并释放内存
void destroyQueue(Queue* q) {
free(q->queue);
free(q);
}
int main() {
Queue* q = createQueue(5); // 创建一个容量为5的循环队列
// 使用enqueue和dequeue方法演示操作...
enqueue(q, 1);
enqueue(q, 2);
printf("Dequeued element: %d\n", dequeue(q)); // 输出: Dequeued element: 1
destroyQueue(q); // 销毁队列
return 0;
}
```
阅读全文