问题描述
编写程序,实现从键盘输入一个正整数,输出该正整数的位数及每位数
输出样例
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; }