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



我需要知道,如何将整数从stdin中保存到数组中,这是由第一个整数在排队中给出的... ehm ...希望您能理解。我会给你一个例子。

在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个数组)可能很高,我需要有效地与内存一起工作...所以我想我需要诸如malloc和之类的东西free解决了这个问题,还是我错了?数组(0、5、6)的名称可以更改。括号中的整数数量没有最大限制。

感谢您的任何帮助。

我有假设,这是家庭作业,我做了这个假设,这不是您的第一个作业,所以我不会为您提供解决方案,而是一些解决方案可以帮助您自己解决的技巧。

给定输入线

5:[10,11,12,13]

我将调用" 5"数组名称"和10、11、12和13要添加的值。

  1. 您应该实现一些系统以将数组名称映射到索引。一种微不足道的方法就是这样:

size_t num_arrays;
size_t * array_names;

在这里,在您的示例输入中,num_arrays最终将用3为CC_4。如果找到一个新数组名称,请添加新数组名称。您也需要值的实际数组:

int * * array;

您需要为每个新数组名称(就像您的 realloc array_names一样)为realloc数组。array[0]将表示数组array_names[0]此处阵列0array[1]将代表阵列array_names[1]此处阵列5,并且array[2]将代表阵列array_names[2]这里的CC_16数组6

要访问数组,找到像这样的索引:

size_t index;
for (size_t index = 0; index < num_arrays && array_names[index] != search; ++index) ;
  1. 第二步很容易。一旦找出出来,您需要使用数组[索引]添加elemens, reallocarray[index] = realloc(array[index], new size))并在那里添加元素 array[index][i+old_size] = new_value[i]

显然,您还需要跟踪单独的数组中的元素数量;)

提示:如果搜索数组名称花费太长,则必须通过一些更复杂的数据结构(例如哈希地图或二进制搜索树)替换该琐碎的映射部分。其余的概念可能会或多或少地保持不变。

我建议您是否有问题来解析输入行,您打开一个针对此解析部分的新问题。

在算法术语中,您需要从 int s到数组的地图(关联数组)。这是很久以前在大多数高级语言中解决的。

如果您必须手动实施它,则有一些选择:

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

最后两个结构是编程经典的一部分,在各种文章和书籍中都得到了很好的描述。

最新更新