用c语言编程,通过键盘读取元素建立循环队列,给定一个元素,将此元素插入队列中,将队头元素出队列
时间: 2024-10-26 15:03:05 浏览: 29
在C语言中,我们可以通过以下步骤创建循环队列,并实现入队(enqueue)和出队(dequeue)操作:
首先,我们需要定义一个队列结构体,包含队列的数组、队头、队尾索引,以及队列的长度:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10 // 队列最大容量
typedef struct {
int data[MAX_SIZE]; // 存储元素的数组
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 创建队列函数
Queue* createQueue() {
Queue* queue = malloc(sizeof(Queue));
queue->front = -1;
queue->rear = -1;
return queue;
}
// 检查队列是否满或空
int isFull(Queue* queue) {
return (queue->rear + 1) % MAX_SIZE == queue->front;
}
// 判断队列是否为空
int isEmpty(Queue* queue) {
return queue->front == -1 && queue->rear == -1;
}
// 入队操作(enqueue)
void enqueue(Queue* queue, int value) {
if (!isFull(queue)) {
queue->rear = (queue->rear + 1) % MAX_SIZE;
queue->data[queue->rear] = value;
printf("元素 %d 已成功加入队列。\n", value);
} else {
printf("队列已满,无法再加入元素。\n");
}
}
// 出队操作(dequeue)
int dequeue(Queue* queue) {
if (!isEmpty(queue)) {
int value = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE;
printf("队首元素是 %d,已出队。\n", value);
return value;
} else {
printf("队列为空,无法出队。\n");
return -1;
}
}
// 主程序
int main() {
Queue* queue = createQueue();
char input;
while (scanf("%c", &input) == 1) { // 读取键盘字符
switch (input) {
case 'i': // 插入元素
if (queue->front == -1) {
enqueue(queue, getchar()); // 如果队列为空,直接读入
} else {
enqueue(queue, getchar()); // 否则等待用户输入
}
break;
case 'o': // 出队元素
printf("\n当前队首元素:");
int dequeuedValue = dequeue(queue);
if (dequeuedValue != -1) {
printf("%d", dequeuedValue);
}
break;
default:
break;
}
}
free(queue);
return 0;
}
```
在这个程序中,用户可以输入'i'来插入一个字符到队列,输入'o'来查看并删除队首元素。注意,这里假设输入的是单个字符,若需要处理其他类型的输入,可以根据需求进行调整。
阅读全文