我想创建一个结构,如下图所示,为此,我创建了两个结构。一个用于所有有序顶点,另一个用于相邻的顶点。
struct verticeslist{ //list with all ordered vertices
int n;
struct adjacentlist *pointer; //pointer to the list with adjacent vertices
struct verticeslist *next;
};
struct adjacentlist{ //list with the adjacent vertices
int n;
struct adjacentlist *next;
};
然后,使用这些结构,我想使用用户的特定输入来初始化它们。
int main(){
int i, vertices, links, start;
struct verticeslist *lv;
struct adjacentlist *lva;
lv = (struct verticeslist *)malloc(sizeof(struct verticeslist));
scanf("%d %d\n%d", &vertices, &links, &start); //save the values to create the list
for (i=1; i<=vertices; i++){ //create and initialize the list
lv->n = i;
lv = lv->next;
}
while(lv != NULL){ //print the vertices list
printf("%d ", lv->n);
lv = lv->next;
}
return 0;
}
我尝试运行此程序,但出现段错误错误。为什么?
编辑:
我更改了最后一个代码并了解了问题所在,但是现在我试图构建结构的第二部分,但是我不知道如何跟踪第一个元素,因为我在循环中分配了
lv->pointer = lva
。程序末尾的lv->pointer
将指向另一个结构的最后一个数字(相邻列表)。scanf("%d ", &input);
while (input != EOF){
lv = firstvert;
while (lv != NULL){
if(lv->n == input){
scanf("%d\n", &adjacentnum);
lva = (struct adjacentlist *)malloc(sizeof(struct adjacentlist));
lva->n = adjacentnum;
lva->next = NULL;
lv->pointer = lva;
}
lv = lv->next;
}
scanf("%d ", &input);
}
free(firstvert);
free(lv);
free(lva);
return 0;
最佳答案
您仅在列表上分配了一个节点,您需要为使用的每个节点分配内存。像这样的东西
for (i=1; i<=vertices; i++){ //create and initialize the list
lv->n = i;
lv->next = (struct verticeslist *)malloc(sizeof(struct verticeslist));
lv = lv->next;
lv->next = 0;
}
编辑将lv-> next设置添加为null。否则,当您稍后尝试阅读时,仍然会遇到段错误。
关于c - 链表-C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29033480/