标签:
1
题目内容:
你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束。然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1。
输入格式:
一系列正整数,输入-1表示结束,-1不是输入的数据的一部分。
输出格式:
按照与输入相反的顺序输出所有的整数,每个整数后面跟一个空格以与后面的整数区分,最后的整数后面也有空格。
输入样例:
1 2 3 4 -1
输出样例:
4 3 2 1
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 struct num 5 { 6 int num;//数字 7 struct num *next;//下一个结点 8 }; 9 typedef struct num NUM;//简写 10 11 //涉及4个函数 12 NUM *Init();//创建头结点,头结点不存储数据 13 void Add(NUM *head, int num);//插入数据到尾部 14 void Print(NUM *head);//顺序打印,非递归 15 NUM *Dao(NUM *head);//链表逆序,返回新的头指针 16 17 void main() 18 { 19 int num = 1; 20 NUM *head = Init();//创建头结点,头结点不存储数据 21 22 scanf("%d", &num); 23 24 while (num != -1)//输入 - 1表示结束 25 { 26 Add(head, num); 27 scanf("%d", &num); 28 } 29 30 NUM *newhead = Dao(head);//链表逆序,返回新的头指针 31 32 Print(newhead);//顺序打印,非递归 33 34 system("pause"); 35 } 36 37 NUM *Init()//创建头结点,头结点不存储数据 38 { 39 NUM *head = (NUM*)malloc(sizeof(NUM));//创建头结点 40 if (head == NULL) 41 { 42 printf("分配内存失败\n"); 43 return NULL; 44 } 45 else 46 { 47 head->next = NULL;//最后指向NULL 48 return head;//返回头指针 49 } 50 } 51 52 void Add(NUM *head, int num)//插入数据到尾部 53 { 54 NUM *p = head;//第1步,创建指针p,用于移动 55 if (p == NULL) 56 { 57 return; 58 } 59 while (p->next != NULL)//遍历 60 { 61 p = p->next; 62 } 63 64 NUM *new = (NUM*)malloc(sizeof(NUM));//第2步,创建指针new,用于存储新数据 65 if (new == NULL) 66 { 67 printf("分配内存失败\n"); 68 return; 69 } 70 new->num = num;//学号 71 new->next = NULL;//最后指向NULL 72 73 p->next = new;//第3步,p指向new 74 } 75 76 void Print(NUM *head)//顺序打印,非递归 77 { 78 NUM *p = head;//创建指针,用于移动 79 int count = 0;//计数器 80 81 while (p->next != NULL) 82 { 83 if (count) 84 { 85 printf(" "); 86 } 87 printf("%d", p->next->num); 88 p = p->next; 89 count++; 90 } 91 } 92 93 NUM * Dao(NUM *head)//链表逆序,返回新的头指针 94 { 95 NUM * p = NULL;//创建指针p 96 NUM * q = head->next;//创建指针q 97 NUM * r = NULL;//创建指针r 98 99 while (q) 100 { 101 r = q->next;//指针r指向q的下一个结点 102 q->next = p;//指针q指向前面结点 103 p = q;//移动指针p 104 q = r;//移动指针q 105 } 106 107 NUM *newhead = (NUM *)malloc(sizeof(NUM));//创建指针newhead,作为新头指针 108 newhead->next = p;//新头指针指向指针p 109 return newhead;//返回新头指针 110 }
网易云课堂_C语言程序设计进阶_第五周:递归与简单算法:递归、搜索、二分搜索、简单排序_1逆序输出的数列
标签:
原文地址:http://www.cnblogs.com/denggelin/p/5619531.html