【发布时间】:2019-06-15 07:09:21
【问题描述】:
我正在处理实现一个哈希表。我对哈希表的理解是,拥有一个类似表格的数组,您可以通过获取哈希值并通过表格大小对其进行修改来快速访问元素。所以我最初的想法是声明
Node *hTable [100];
在哪里
typedef struct node {
char *s;
int value;
} Node;
并转到数组的索引并分配一个属于那里的新元素。但是,问题是我需要增加我的表。
所以,我的问题是,我将如何创建一个动态表,但像访问数组一样访问它? (例如table[i])。
我知道你需要调用类似的东西
Node *table = (Node*)malloc(sizeof(Node)*size);
这让您可以像访问表一样访问它table[i] =...,但如果我这样做了,我就不能在表的索引中声明一个新节点
table[i]=(Node*)malloc(sizeof(Node));
这是我一直在测试的代码(出现 seg 错误),以便更好地了解问题:
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef struct node {
5 int data;
6 struct node *next;
7 } Node;
8
9
10 void main() {
11 Node **list;
12 *list = (Node*)malloc(sizeof(Node)*10);
13 for (int i = 0; i < 10; i++) {
14 list[i] = (Node*)malloc(sizeof(Node)); //problem here?
15 list[i]->data = i;
16 list[i]->next = NULL;
17 }
18 printf("printing...\n");
19 for (int i = 0; i < 10; i++) {
20 printf("%d ", list[i]->data);
21 }
22 }
【问题讨论】:
-
Node **list; *list = ...已经是未定义的行为。list未初始化,您取消引用它。 -
list = malloc(sizeof(*list)*10); -
您可以使用
realloc()扩大您的表格。不管是Node的数组还是Node*的数组都是一样的。 -
请不要粘贴带有行号的代码,这样会让人难以复制粘贴代码。
标签: c arrays dynamic hash malloc