编写一段完整代码用c语言实现输入数据后循环队列的创建、初始化、判队空、人队、出队、获取队首元素的操作
时间: 2024-12-15 18:16:29 浏览: 12
在 C 语言中,我们可以使用数组和指针来实现循环队列。这里是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef struct {
int* queue; // 队列元素的指针
int front; // 队头位置
int rear; // 队尾位置
int size; // 队列实际大小
} Queue;
// 初始化循环队列
Queue* create_queue() {
if ((queue = (int*)malloc(MAX_SIZE * sizeof(int))) == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
front = rear = -1;
size = 0;
return &queue[0];
}
// 判断队列是否为空
int is_empty(Queue* q) {
return (front == -1);
}
// 入队操作(添加元素)
void enqueue(Queue* q, int data) {
if (size >= MAX_SIZE - 1) { // 队满
printf("Queue is full.\n");
return;
}
rear = (rear + 1) % MAX_SIZE; // 循环队列,后进先出
queue[rear] = data;
size++;
}
// 出队操作(删除并返回队首元素)
int dequeue(Queue* q) {
if (is_empty(q)) { // 队空
printf("Queue is empty.\n");
return -1;
}
int data = queue[front];
queue[front] = 0; // 简单处理队首元素
front = (front + 1) % MAX_SIZE;
size--;
return data;
}
// 获取队首元素(不删除)
int get_front(Queue* q) {
if (is_empty(q)) {
printf("Queue is empty.\n");
return -1;
}
return queue[front];
}
int main() {
Queue* queue = create_queue();
if (!queue) return 1;
// 示例操作
enqueue(queue, 1);
enqueue(queue, 2);
enqueue(queue, 3);
printf("Front element: %d\n", get_front(queue)); // 输出 1
int removed_data = dequeue(queue);
printf("Removed element: %d\n", removed_data); // 输出 1
is_empty(queue) ? printf("Queue is empty.\n") : printf("Queue is not empty.\n"); // 输出 "Queue is not empty."
return 0;
}
```
这个代码首先创建了一个循环队列结构,然后实现了入队、出队、判断队空以及获取队首元素的功能。注意,这里假设队列中的第一个元素作为队首(`front`),而最后一个元素的下一个位置作为队尾(`rear`)。当队列满或空时会有相应的提示。
阅读全文