赞
踩
逆序输出(10分)
题目内容:
你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束。然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1。
输入格式:
一系列正整数,输入-1表示结束,-1不是输入的数据的一部分。
输出格式:
按照与输入相反的顺序输出所有的整数,每个整数后面跟一个空格以与后面的整数区分,最后的整数后面也有空格。
输入样例:
1 2 3 4 -1
输出样例:
4 3 2 1
时间限制:500ms内存限制:32000kb
- //利用链表逆序输出,20180618
- #include <stdio.h>
- #include <stdlib.h>
-
- //定义一个结点,该结点包含数据和指向前一个结点的指针
- //这有利于后面逆序输出
- typedef struct _node {
- int value;
- struct _node *before;
- } Node;
-
- int main()
- {
- Node * head = NULL; //头结点初始化为空
- int number;
- do {
- scanf("%d", &number);
- if ( number != -1)
- {
- Node *p = (Node*)malloc(sizeof(Node));
- p->value = number;
- p->before = head; //p->before为头结点,将新结点p连接到链表(即p的指针指向头结点)
- head = p; //再将头结点更新为p结点
- }
- } while ( number != -1);
- Node *p; //新建结点p进行遍历
- for ( p = head; p; p=p->before) {
- printf("%d ", p->value);
- }
-
- return 0;
- }
学会数据结构是必要的,最近才逐渐会使用和理解链表。下面是编写的一个拥有前向指针和后继指针的链表,也可以实现类似的功能,但更为灵活,可以随意实现正向或者逆向的数据输出。
- //利用链表逆序输出,20180618
- #include <stdio.h>
- #include <stdlib.h>
- #include <iostream>
- using namespace std;
-
- typedef struct _node {
- struct _node *before;
- int value;
- struct _node *next;
- } Node;
-
- int main()
- {
- Node * head = NULL; //头结点初始化为空
- Node * tail = head;
- int number;
- do {
- scanf("%d", &number);
- if ( number != -1)
- {
- Node *p = (Node*)malloc(sizeof(Node));
- p->before=NULL;
- p->value = number;
- p->next = NULL; //p->next为头结点,将新结点p连接到链表(即p的指针指向头结点)
- if(tail){
- p->before = tail;
- tail->next = p; //再将头结点更新为p结点
- tail=p;
- }
- else{
- tail=p;
- head=tail;
- }
- }
- } while ( number != -1);
- Node *p; //新建结点p进行遍历
- for ( p = tail; p; p=p->before) {
- printf("%d ", p->value);
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。