Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python C语言中高效的数组查找 我试图为C语言编写一个简单的语言解释器。我希望C使用C++,因为C的简单性。_Python_C_Arrays_Variables_Go - Fatal编程技术网

Python C语言中高效的数组查找 我试图为C语言编写一个简单的语言解释器。我希望C使用C++,因为C的简单性。

Python C语言中高效的数组查找 我试图为C语言编写一个简单的语言解释器。我希望C使用C++,因为C的简单性。,python,c,arrays,variables,go,Python,C,Arrays,Variables,Go,我不确定在C语言中该怎么做的是,存储变量和变量查找 我计划将变量存储在一个数组中,但我想我需要一个大小可变的数组 除了在数组中循环外,我还不知道从数组中查找变量的有效方法 我想知道,创建可变大小数组的有效方法是什么?Python或Ruby或Go如何高效地存储和检索变量 Python或Ruby或Go如何高效地存储和检索变量 Python和Ruby用法:将变量的名称转换为整数,该整数用作数组的索引。总是会发生多个名称冲突(转换为同一个整数),因此需要考虑到这一点,允许在同一个插槽中从名称到值进行多个

我不确定在C语言中该怎么做的是,存储变量和变量查找

我计划将变量存储在一个数组中,但我想我需要一个大小可变的数组

除了在数组中循环外,我还不知道从数组中查找变量的有效方法

我想知道,创建可变大小数组的有效方法是什么?Python或Ruby或Go如何高效地存储和检索变量

Python或Ruby或Go如何高效地存储和检索变量

Python和Ruby用法:将变量的名称转换为整数,该整数用作数组的索引。总是会发生多个名称冲突(转换为同一个整数),因此需要考虑到这一点,允许在同一个插槽中从名称到值进行多个绑定,但每个名称只需要检查几个绑定

Go被编译,因此变量在编译时被转换为地址(静态或相对于堆栈或帧指针的偏移量)

创建可变大小数组的有效方法是什么

如果您决定这样做,您将使用
malloc
realloc


不幸的是,在调整哈希表的bucket数组大小的情况下,
realloc
没有用处,因为旧bucket数组中的所有键都需要逐个重新哈希,以找到它们在新数组中的位置。如果您知道解释器将要解释的程序的最大大小,您可以直接按最大程序的大小分配哈希表,并避免编写哈希表大小调整函数。

我认为您在尝试自己实现变量存储时可能会非常激动。我建议您使用一个现有的hashmap,只想看看它在概念上是如何工作的,并尽可能地封装它。如果它被证明是一个瓶颈,您可以稍后回来进行优化


我有点自信地说,在那个时候,您不会选择动态扩展的数组。您必须考虑,需要实现基于字符串的搜索,以按名称查找变量,因此要比具有动态扩展数组的哈希图更好地完成。如果未排序,则对其进行搜索为O(n),如果排序,则对其进行搜索为O(logn),而hashmap具有O(1)搜索复杂性。

您可以使用哈希表。对于整数,您可以使用数组indexing@user4098326哈希表实现起来复杂吗?哈希表在C语言中实现起来并不是那么难,但我不会对一个初学者造成影响。阅读本手册以熟悉概念。但是,除非你真的很想自己做,否则我建议使用现有的开源实现。在我的很多代码中,我在完整的AVL树前面使用一个较小的哈希表。当查找子集更频繁时,或者我想使用有限大小的哈希表(不必担心需要增加哈希表)时,快速查找。将数组分块调整大小是一个好主意吗?例如,如果我的数组可以容纳10个元素,而我需要一个第11个元素,那么我应该使数组足够大以容纳20个元素还是11个元素?@Francis 20。无论你选择什么方法,通过加倍大小来重新分配。这意味着,在任何给定的时间内,最多有50%的空间被浪费,并且每次出现新的变量时,它可以节省与现有变量数量成比例的代价。