数据结构环形代码出队入队代码实现
时间: 2024-07-08 18:01:18 浏览: 94
数据结构中的环形队列(Circular Queue)是一种特殊的线性队列,其特点是最后一个元素的下一个位置不是第一个元素,而是第一个元素之后的一个。这种设计使得插入和删除操作可以在常数时间内完成,即使队列满或空。
下面是用C语言实现环形队列的基本出队(Dequeue)和入队(Enqueue)操作:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int* data; // 队列元素数组
int front, rear; // 前端和后端指针
int size; // 队列容量
} CircularQueue;
// 初始化环形队列
void init(CircularQueue* cq, int capacity) {
cq->data = (int*)malloc(capacity * sizeof(int));
cq->front = cq->rear = -1;
cq->size = capacity;
}
// 入队操作 (Enqueue)
void enqueue(CircularQueue* cq, int value) {
if (cq->rear == cq->size - 1) { // 如果已满
printf("Queue is full.\n");
return;
}
if (cq->front == -1) { // 队列为空
cq->front = 0;
} else {
cq->rear = (cq->rear + 1) % cq->size; // 根据循环性质更新后端
}
cq->data[cq->rear] = value;
}
// 出队操作 (Dequeue)
int dequeue(CircularQueue* cq) {
if (cq->front == -1) { // 如果队列为空
printf("Queue is empty.\n");
return -1;
}
if (cq->front == cq->rear) { // 队列只有一个元素,出队后队列结束
int value = cq->data[cq->front];
free(cq->data);
cq->front = cq->rear = -1;
cq->size = 0;
return value;
} else {
int value = cq->data[cq->front]; // 获取并移除前端元素
cq->front = (cq->front + 1) % cq->size;
return value;
}
}
// 示例
int main() {
CircularQueue cq;
init(&cq, 5); // 初始化一个大小为5的队列
enqueue(&cq, 1);
enqueue(&cq, 2);
enqueue(&cq, 3);
printf("Front element: %d\n", dequeue(&cq)); // 输出1
printf("Front element after Dequeue: %d\n", dequeue(&cq)); // 输出2
return 0;
}
```
阅读全文