请用c语言编写循环队列的各种基本操作,并在此基础上设计一个主程序,完成如下功能: (1)初始化循环队列; (2)用户输入一个元素,将此元素插入此队列中; (3)将队头元素出队,并且打印到屏幕上。
时间: 2024-10-23 18:08:23 浏览: 33
在C语言中,我们可以使用数组来实现循环队列,因为数组可以无缝地连接数组的最后一个元素和第一个元素。下面是一个简单的循环队列结构的定义以及包含基本操作的函数实现:
```c
#include <stdio.h>
#define MAX_SIZE 50
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化循环队列
void initQueue(Queue* queue) {
queue->front = -1;
queue->rear = -1;
}
// 检查队列是否满
int isFull(Queue* queue) {
return (queue->rear + 1) % MAX_SIZE == queue->front;
}
// 检查队列是否空
int isEmpty(Queue* queue) {
return queue-1 && queue->rear == -1;
}
// 入队操作
void enqueue(Queue* queue, int element) {
if (isFull(queue)) {
printf("Queue is full.\n");
} else {
queue->rear = (queue->rear + 1) % MAX_SIZE;
queue->data[queue->rear] = element;
if (isEmpty(queue)) {
queue->front = queue->rear;
}
printf("Element %d inserted successfully.\n", element);
}
}
// 出队操作
int dequeue(Queue* queue) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return -1; // 返回特殊值表示出队失败
} else {
int removed = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE;
if (queue->front == queue->rear) {
queue->front = queue->rear = -1; // 空队列处理
}
printf("Removed element: %d\n", removed);
return removed;
}
}
// 主程序示例
int main() {
Queue myQueue;
initQueue(&myQueue);
while (true) {
printf("\nChoose an operation:\n1. Enqueue\n2. Dequeue\n3. Exit\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
int elem;
printf("Enter an element to enqueue: ");
scanf("%d", &elem);
enqueue(&myQueue, elem);
break;
case 2:
int dequeued = dequeue(&myQueue);
if (dequeued != -1) {
printf("Last element dequeued: %d\n", dequeued);
}
break;
case 3:
exit(0); // 结束程序
default:
printf("Invalid choice. Please try again.\n");
}
}
return 0;
}
```
在这个程序中,我们首先初始化队列,然后提供菜单让用户选择操作。用户可以选择入队、出队或退出。根据用户的选择,我们会调用相应的函数进行操作。
阅读全文