网易云课堂_C语言程序设计进阶_第五周:递归与简单算法:递归搜索二分搜索简单排序_1逆序输出的数列
Posted 邓戈麟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网易云课堂_C语言程序设计进阶_第五周:递归与简单算法:递归搜索二分搜索简单排序_1逆序输出的数列相关的知识,希望对你有一定的参考价值。
1
逆序输出的数列(10分)
题目内容:
你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束。然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1。
输入格式:
一系列正整数,输入-1表示结束,-1不是输入的数据的一部分。
输出格式:
按照与输入相反的顺序输出所有的整数,每个整数后面跟一个空格以与后面的整数区分,最后的整数后面也有空格。
输入样例:
1 2 3 4 -1
输出样例:
4 3 2 1
时间限制:2000ms内存限制:128000kb
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逆序输出的数列的主要内容,如果未能解决你的问题,请参考以下文章
网易云课堂_C语言程序设计进阶_第三周:结构:结构类型定义联合_1学生成绩简单统计
网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型浮点类型枚举类型
网易云课堂_C语言程序设计进阶_第七周:文件:文件访问格式化输入输出二进制输入输出
网易云课堂_C语言程序设计进阶_第六周:程序结构:内存模型(全局变量和局部变量)头文件宏定义函数指针和回调函数,ACL图形库的消息机制