我们被告知我们的输入文件将是一个简单的数字列表:
1 3 4
2 3
3 4
4 1 2
其中第一个数字是源节点,后面的数字是它的相邻节点。
我试图弄清楚如何最好地存储它。我想首先初始化一个“图形”,一个包含所有这些节点的数组。然后在逐行读取文件时,我会将根节点存储到图形数组中,然后用以下数字更新节点的 outlist(相邻节点),直到到达行尾,对每一行重复此操作,直到EOF。
但是我在如何初始化图表上苦苦挣扎,一旦达到大小,我是否只是假设某个大小和 realloc() ?我是否先读取文件并计算行数以找出大小,然后重新读取文件以存储节点?还有其他方法吗?
这是我的数据结构的代码:
int initialize (Graph *mygraph, int MaxSize) {
mygraph->MaxSize = MaxSize;
mygraph->table = (Node *)malloc(sizeof(Node) * MaxSize);
return 0;
}
int insert_node (Graph *mygraph, int n, char *name) {
mygraph->table[n].name = strdup(name);
mygraph->table[n].outdegree = 0;
return 0;
}
int insert_link (Graph *mygraph, int source, int target) {
List *newList = (List *)malloc(sizeof(List));
newList->index = target;
newList->next = mygraph->table[source].outlist;
mygraph->table[source].outlist = newList;
return 0;
}
所以在阅读文件时,
我初始化图表。
我读取了第一个数字,将其存储为新的图形节点。
我阅读下一个数字,直到点击“\n”,并将它们存储为指向上述根节点的图形链接。
我对每一行都这样做,直到达到 EOF。
如您所见,在读取整个文件之前,我不知道“MaxSize”是什么。
谢谢!如果我做了任何愚蠢的事情,我对 C 很陌生,很抱歉。