用c语言编写设从键盘输入一序列的字符a1、a2、…、an。设计一个算法实现:若ai为数字字符,ai进队,若ai为小写字母时,将队首元素出队,若ai为其他字符,表示输入结束。要求使用环形队列。 原创
时间: 2024-11-27 15:22:52 浏览: 16
在C语言中,我们可以使用结构体来创建一个环形队列,并结合条件判断来实现这个功能。首先,我们需要定义一个队列节点结构体,然后创建一个环形队列。以下是一个简单的步骤:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct {
char data;
struct QueueNode* next;
} QueueNode;
typedef struct {
QueueNode* front;
QueueNode* rear;
int size;
} Queue;
// 初始化队列
Queue* initQueue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->front = queue->rear = NULL;
queue->size = 0;
return queue;
}
// 插入数据到队尾(环形)
void enqueue(Queue* queue, char data) {
if (queue->size == MAX_SIZE) { // 如果已满,报错
printf("Queue is full.\n");
return;
}
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = data;
newNode->next = queue->rear; // 链接新节点到当前尾部
if (queue->rear != NULL)
queue->rear->next = newNode; // 更新队尾指针,形成循环
else
queue->front = newNode; // 如果队列为空,头尾相连
queue->rear = newNode;
queue->size++;
}
// 出队操作
char dequeue(Queue* queue) {
if (queue->size == 0) { // 如果空,报错
printf("Queue is empty.\n");
return '\0';
}
char data = queue->front->data; // 取出队首元素
QueueNode* temp = queue->front;
if (queue->front == queue->rear) { // 如果队列只有一个元素,头尾相接
queue->front = queue->rear = NULL;
} else {
queue->front = queue->front->next; // 更新队首指针
}
free(temp); // 释放内存
queue->size--;
return data;
}
int main() {
Queue* queue = initQueue();
while (true) {
char input;
scanf(" %c", &input);
if (isdigit(input)) { // 输入的是数字字符
enqueue(queue, input);
} else if (islower(input)) { // 输入的是小写字母
char removedData = dequeue(queue);
printf("Removed character: %c\n", removedData);
} else { // 输入不是数字或字母,退出循环
break;
}
}
return 0;
}
```
阅读全文