设计一个算法实现:若输入字符为数字字符,则将其入队;若输入字符为小写字母,则将队首元素出队;若输入字符为其他字符,表示输入结 束。(用C语言)
时间: 2024-10-22 10:23:10 浏览: 1
可以设计一个简单的循环结构来实现这个功能,使用队列数据结构来存储数字字符。这里假设我们已经有一个动态队列(如`typedef struct Queue {char* queue; int front; int rear;} Queue;`)。以下是一个基本的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 队列操作函数,入队、出队
void enqueue(Queue* q, char c) {
if (q->rear == -1) {
q->queue = (char*)malloc(sizeof(char));
q->front = q->rear = 0;
} else {
q->queue[q->rear] = c;
q->rear = (q->rear + 1) % sizeof(q->queue);
}
}
char dequeue(Queue* q) {
if (q->front == q->rear) {
printf("Queue is empty.\n");
return '\0'; // 返回空字符表示队列已空
} else {
char result = q->queue[q->front];
q->front = (q->front + 1) % sizeof(q->queue);
return result;
}
}
int main() {
Queue q = {NULL, -1}; // 初始化队列
char input;
while ((input = getchar()) != EOF && input != '#') { // '#' 表示输入结束
switch (input) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
enqueue(&q, input);
break;
default:
if (islower(input)) {
char popped_char = dequeue(&q);
if (popped_char != '\0') {
printf("%c", popped_char); // 输出队首元素
}
}
}
}
// 打印剩余的数字字符(如果有的话)
while (!isEmpty(&q)) {
char popped_char = dequeue(&q);
printf("%c", popped_char);
}
return 0;
}
```
阅读全文