我需要知道,如何将整数从标准输入保存到数组中,由行中的第一个整数给出…嗯..。希望你能理解。我给你举个例子。
在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)可能非常高,我需要有效地使用memory...So我猜我需要像malloc
和free
这样的东西来解决这个问题,或者我错了?可以更改数组(0,5,6)的名称。括号中的整数数没有最大限制。
谢谢你的帮助。
发布于 2016-11-28 03:41:26
我同意假设,这是家庭作业,我同意假设,这不是你要做的第一个家庭作业,所以我不会给你一个解决方案,而是一些小技巧,可以帮助你自己解决它。
给定输入行
5: 10,11,12,13
我将"5“称为”数组名“,并将10、11、12和13称为要添加的值。
。
size_t num_arrays;
size_t * array_names;
在这里,在您的示例输入中,num_arrays
最终将是带有array_names[3] = { 0, 5, 6}
的3
。如果找到新的数组名称,请使用realloc
并添加新的数组名称。此外,您还需要值的实际数组:
int * * array;
您需要为每个新的数组名称创建数组(就像realloc
array_names一样)。array[0]
在这里代表阵列array_names[0]
阵列0
,array[1]
在这里代表阵列array_names[1]
在这里阵列5
和array[2]
在这里代表阵列array_names[2]
阵列6
。
要访问一个数组,可以像这样查找它的索引:
size_t index;
for (size_t index = 0; index < num_arrays && array_names[index] != search; ++index) ;
array[index][i+old_size] = new_value[i]
.来添加元素,添加元素(array[index] = realloc(array[index], new size)
),并在那里添加元素
显然,您还需要跟踪单独数组中的元素数量;)
提示:如果搜索数组名称花费的时间太长,您将不得不用一些更复杂的数据结构来替换那些微不足道的映射部分,比如散列映射或二进制搜索树。这个概念的其余部分可能会大致保持不变。
如果您在解析输入行时遇到问题,我建议您打开一个特定于此解析部分的新问题。
发布于 2016-11-28 07:51:31
在算法方面,您需要将(关联数组)从int
映射到数组。这在很久以前就在大多数高级语言中得到了解决。
如果您必须手动实现它,您有以下几个选择:
for
中进行搜索,将它们映射到索引0,1,2,3(当;最后两种结构是经典编程的一部分,在各种文章和书籍中都有很好的描述。
https://stackoverflow.com/questions/40833014
复制相似问题