问题描述
编写程序,实现从键盘输入一个正整数,输出该正整数的位数及每位数
输出样例
1234
输出样例
第1位是1
第2位是2
第3位是3
第4位是4
共有4位
解题思路
使用队列接收所有的字符,并记录队列的入队数,而后字符出队,打印字符
程序实现
#include
#include
typedef struct Queue {
int data;
struct Queue *next;
} Queue;
typedef struct LinkQueue {
Queue *front;
Queue *rear;
} LinkQueue;
int initQueue(LinkQueue *linkQueue);
int enterQueue(LinkQueue *linkQueue, char number);
char outQueue(LinkQueue *linkQueue);
/**
* 使用队列存储得到的每一位字符
* 记录输入的字符数
* 出队打印队列中的数据
*/
int main(int argc, char *argv[]) {
LinkQueue link;
initQueue(&link);
char number;
number = getchar();
int i = 0;
while (number != '\n') {
enterQueue(&link, number);
i++;
number = getchar();
}
for (int j = 1; j <= i; j++) {
printf("第%d位是:%c\n", j, outQueue(&link));
}
printf("共有%d位", i);
return 0;
}
/**
* 初始化队列
*/
int initQueue(LinkQueue *linkQueue) {
linkQueue->front = (Queue*)malloc(sizeof(Queue));
if (linkQueue->front != NULL) {
linkQueue->rear = linkQueue->front;
linkQueue->front->next = NULL;
return 1;
} else {
return 0;
}
}
/**
* 入队操作
* linkQueue:队列
* number:输入的字符
*/
int enterQueue(LinkQueue *linkQueue, char number) {
Queue *q = (Queue *)malloc(sizeof(Queue));
if (q != NULL) {
q->data = number;
q->next = NULL;
linkQueue->rear->next = q;
linkQueue->rear = q;
} else {
return 0;
}
return 1;
}
/**
* 出队操作
* linkQueue:队列
* return:出队的字符
*/
char outQueue(LinkQueue *linkQueue) {
char number;
Queue *q;
if (linkQueue->front == linkQueue->rear) {
return 0;
}
q = linkQueue->front->next;
linkQueue->front->next = q->next;
if (linkQueue->rear == q) {
linkQueue->rear = linkQueue->front;
}
number = q->data;
free(q);
return number;
}
运行结果