设从键盘输入一序列的字符a1、a2、…、an。使用循环队列设计一个算法实现如下功能:若ai为英文字母(大写或小写),ai进队;若ai为数字字符,将队首元素出队;若ai为其他字符,表示输入结束。同时显示队列中元素的值、队头指针和队尾指针的值。用C语言写出代码程序
时间: 2024-11-06 11:22:45 浏览: 7
第2章学习指导与习题1
在C语言中,我们可以使用`stdio.h`, `ctype.h`库来进行字符类型的判断,并利用循环队列(使用数组实现)来完成这个任务。这里是一个简单的示例代码:
```c
#include <stdio.h>
#include <ctype.h>
#define MAX_SIZE 50 // 队列最大容量
typedef struct {
char data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void init(Queue* q) {
q->front = q->rear = -1;
}
// 添加元素到队尾
void enqueue(Queue* q, char c) {
if (q->rear + 1 == MAX_SIZE) {
printf("Queue is full, can't enqueue.\n");
return;
}
q->data[++q->rear] = c;
if (q->front == -1) {
q->front = 0;
}
}
// 删除并返回队头元素
char dequeue(Queue* q) {
if (q->front == q->rear) {
printf("Queue is empty, can't dequeue.\n");
return '\0';
} else {
char res = q->data[q->front++];
return res;
}
}
// 判断字符类型并处理
int main() {
Queue q;
init(&q);
while (1) {
char input = getchar();
if (isalpha(input)) { // 英文字母
enqueue(&q, input);
} else if (isdigit(input)) { // 数字字符
char dequeued = dequeue(&q);
if (dequeued != '\0') {
printf("Dequeued value: %c\n", dequeued);
}
} else { // 其他字符(非字母和数字)
break;
}
// 输出当前队列信息
if (q.rear > q.front) {
printf("Current queue: ");
for (int i = q.front; i <= q.rear; i++) {
printf("%c ", q.data[i]);
}
printf("\nFront pointer: %d Rear pointer: %d\n", q.front, q.rear);
} else {
printf("Queue is empty.\n");
}
}
return 0;
}
```
在这个程序中,我们首先初始化队列,然后通过`getchar()`获取用户输入,对每个字符进行判断并采取相应的操作。当遇到非字母和数字字符时,跳出循环,结束输入。
阅读全文