首页新闻找找看学习计划

如何在不知道有多少个数字的情况下,往数组里输入数字?

0
悬赏园豆:100 [已解决问题] 解决于 2018-03-26 20:56

如何在不知道有多少个数字的情况下,往数组里输入数字?

暄妍的主页 暄妍 | 初学一级 | 园豆:108
提问于:2018-03-20 19:53

你用的哪种语言,请描述的具体一点!

Mad_Rabbit 1年前
< >
分享
最佳答案
0

请问你是用什么语言的?

 

如果是用java或者c# ,,那么使用List,或者Array类,都可以在不知道有多少数字的情况下push进去。

 

如果是C/C++,那么由于c/c++中 不允许定义动态数组 (C++中可以使用STL里的List),也就是数组初始化必须标明长度。这个时候就需要自己来实现一个可动态分配的数组。我用指针和结构体写了一个样例,其中 t指向的就是数组的首个地址,这样可以遍历,删除,增加数字。 

 

struct node
{
    int value;
    node * next;
};

int main()
{
  
    int b;
    
    node *last = new node;
    last->next = new node;
    
    node *start = last;
    //输入一串数字以-1为结束标志
    while(true)
    {
        node *current = new node;
        
        current->next = new node;
        scanf("%d",&b);
        if(b==-1)
            break;
        
        current->value = b;
        last->next= current;
        
        last = current;
    }
    
    //t 指向数组首个地址
    node *t=start->next;
    //输出数字
    while(t->next!=NULL)
    {
        printf("%d",t->value);
        t=t->next;
    } 
    }

 

--------------------------更新----------------------------

想来想去,C语言可以用使用链表的方式来实现,其实还可以使用c语言提供的内存管理函数来实现。

动态的扩展数组的内存。但是一开始申请使用内存的时候还是给一个初始的值哦。例如下面的程序,初始数组长度为2个字节,当要溢出的时候自动增加2个字节的长度。直到数字输入结束。初始内存长度和自动增加长度都是动态的,c语言代码:

#include <stdio.h>
#include <string.h>

#include <stdlib.h>



int main()
{
    int *arr;
    int x;int i=0;int len = 2;int add =2;
    arr = (int*)malloc(len);
    //输入一串数字,以-1为结束标志
    while(true)
    {
        scanf("%d",&x);
        if(x==-1) break;
        arr[i]=x;
        i++;
        if(i>=len)
        {
            arr = (int *)realloc(arr,len+2);
        }
        
    }
    
    for(int j =0;j<i;j++)
    {
        printf("%d ",arr[j]);
    }
    return 0;
    
}



 

-----------------------更新--------------------

如果你是做ACM的刷题的同学,那么上面的方法请忽略,稍作知识了解就可以。所有的题目都会给你数据范围的,你定义数组的时候,长度大于数据范围就可以了。

————————————更新————————-

我大概揣测到你的意图 。输入数据是一串数字。但是不告诉你有多少个。也不告诉你结束标志是什么。

这个时候你可以使用getchar()函数,使用字符接受键盘输入的数字。输入回车的时候getchar会自动结束。你也可以

直接用char数组一次性接受输入的字符串。再对字符串进行拆分成数字存到数组里。

收获园豆:100
Shendu.CC | 小虾三级 |园豆:1811 | 2018-03-20 19:59

这不是个链表吗?

Bluto | 园豆:317 (菜鸟二级) | 2018-03-20 20:53

@Bluto: 链表其实就是动态的数组

Shendu.CC | 园豆:1811 (小虾三级) | 2018-03-20 20:58
其他回答(7)
0

List().ToArray()

花飘水流兮 | 园豆:10177 (专家六级) | 2018-03-20 20:15
0

ka考点是数组的长度是不可变的?

吴瑞祥 | 园豆:28675 (高人七级) | 2018-03-20 20:43
0

兄得,问问题可不能这样问哦,别人不好回答的。数组长度是不可变的,你在不知道有多少填充内容的情况下是不能用数组的,你可以用集合,集合可以随时添加内容进去。可以先去了解一下集合,解决不了可以再问问

西红柿里没有番茄 | 园豆:538 (小虾三级) | 2018-03-20 21:02
0

不明白你的问题。你是想建动态数组吗?

Jackson111 | 园豆:200 (初学一级) | 2018-03-20 23:22
0

 用list集合,或者像datatable这个数据类型,可以动态add数据的数据类型都可以

jqw2009 | 园豆:1891 (小虾三级) | 2018-03-21 10:58
0

JAVA List内部其实也是是数组实现的,你想用数组的话就先定一个长度,长度不够用了再建一个更长的数组,把原先的内容存进去,重复这个过程。

流年飞雨 | 园豆:1923 (小虾三级) | 2018-03-21 13:46
0

Java下的List->Arraylist可以实现你要求的数组功能

Jason缇托 | 园豆:173 (初学一级) | 2018-03-21 14:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册