将整数保存到第一个整数给出的数组中

时间:2016-11-27 19:30:38

标签: c arrays

我需要知道,如何将stdin中的整数保存到数组中,由行中的第一个整数给出...嗯...希望你理解。我会举个例子。

在stdin上我有:

0 : [ 1, 2, 3 ]
5 : [ 10, 11, 12, 13]
6 : [ 2, 4, 9 ]
0 : [ 4, 9, 8 ]
5 : [ 9, 6, 7 ]
5 : [ 1 ]

我需要将这些整数保存到这样的数组中:

0={1, 2, 3, 4, 9, 8}
5={10, 11, 12, 13, 9, 6, 7, 1}
6={2, 4, 9}

我绝对不知道怎么做。有一个问题,数组的数量(在这种情况下 - 0,5,6 - 3个数组)可能非常高,我需要有效地处理内存...所以我想我需要像{{ 1}}和malloc来解决这个问题,还是我错了?可以更改数组(0,5,6)的名称。括号中的整数数没有最大限制。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我假设,这是家庭作业,我假设,这不是你的第一个家庭作业,所以我不会给你一个解决方案,而是一些有用的提示你自己解决。

给定输入行

  

5:[10,11,12,13]

我会打电话给" 5" "数组名称"和10,11,12和13要添加的值。

  1. 您应该实现一些系统来将数组名称映射到索引。一个微不足道的方法是这样的:
  2. size_t num_arrays;
    size_t * array_names;
    

    此处,在您的示例输入中,num_arrays最终会3 array_names[3] = { 0, 5, 6}。如果找到新的数组名称realloc并添加新的数组名称。您还需要值的实际数组:

    int * * array;
    

    每个新数组名称需要realloc数组(如realloc array_names)。 array[0]代表数组array_names[0]此处数组0array[1]代表数组array_names[1]此处数组5array[2]代表数组array_names[2]此处为数组6

    要访问数组,请按以下方式找到它的索引:

    size_t index;
    for (size_t index = 0; index < num_arrays && array_names[index] != search; ++index) ;
    
    1. 第二步很简单。一旦你想通了,你需要使用array [index]来添加elemens,realloc那个(array[index] = realloc(array[index], new size))并在那里添加元素array[index][i+old_size] = new_value[i]
    2. 显然,您还需要跟踪单独数组中元素的数量;)

      提示:如果搜索数组名称花费的时间太长,则必须用一些更复杂的数据结构替换那个简单的映射部分,比如哈希映射或二叉搜索树。概念的其余部分可能或多或少保持不变。

      如果您在解析输入行时遇到问题,我建议您在此解析部分上打开一个新问题。

答案 1 :(得分:0)

在算法术语中,您需要从int s到数组的映射(关联数组)。很久以前,大多数高级语言都解决了这个问题。

如果你必须手动实现它,你有几个选择:

  • 简单的“主”数组,您可以在for每次搜索时将0,5,6,1000000然后映射它们存储到索引0,1,2,3中你必须访问它(这太费时了;
  • 哈希表:编写简单的哈希函数,将0,5,6,1000000(它们被称为键)映射到小于1000的值,分配1000个元素的数组,然后为每个哈希函数结果制作“主”数组结构;
  • 某种树(例如红黑树),手动实现可能有点复杂。

最后两个结构是编程经典的一部分,并在各种文章和书籍中有详细描述。