gpt4 book ai didi

c - 需要帮助来按字母顺序创建我的列表

转载 作者:行者123 更新时间:2023-11-30 16:17:48 25 4
gpt4 key购买 nike

我试图通过在读取文件后将节点放置在正确的位置来从文件创建一个按字母顺序排序的链接列表。文件不得按字母顺序排列。程序正确读取文件,我可以将所有内容添加到列表末尾。

Place search_place(Place first, char *new){

Place aux = first;

while (aux->abcnext != NULL){
if ( strcmp(new,aux->place) > 0)
aux = aux->abcnext;
else
break;
}
return aux;
}

void insert_place(Place first, char* string){

Place previous,temp,new;

previous = search_place(first, string);

if (previous->abcnext == NULL){
new = create_place();
previous->place = string;
new->abcnext = previous->abcnext;
previous->abcnext = new;
}

else{
new = (Place)malloc(sizeof(place_node));
new->place = string;
new->abcnext = previous;
previous = new;
}
}


Place create_place(){
Place aux;
aux=(Place)malloc(sizeof(place_node));

if (aux!=NULL){
aux->place=malloc(25*sizeof(char));
aux->abcnext=NULL;
}
return aux;
}


typedef struct placenode*Place;

typedef struct placenode{
char *place;
Place abcnext;
}place_node;

考虑到我从这段代码中获得的结果,我认为问题与指针或链接列表的 header 或两者都有关。有 4 个位置:P、Z、W、L - 我从列表中仅得到 P -> Z。

最佳答案

if (previous->abcnext == NULL){
new = create_place();
previous->place = string;
new->abcnext = previous->abcnext;
previous->abcnext = new;
}

上面的代码有几个明显的问题。首先,您没有设置 new->place - 您替换了 previous->place ,这似乎不正确。因此,您的新节点的“位置”将为 NULL,并且您将丢失前一个节点的值。

其次,您要分配string 的值,而不是创建一个新副本。如果每次调用该函数时都使用相同的字符串,那么最终所有节点都会指向同一个字符串。

你应该做类似的事情

    new->place = malloc(strlen(string)+1);
strcpy(new->place, string);

或者如果您的 C 版本有它,请使用 strdup

    new->place = strdup(string);

关于c - 需要帮助来按字母顺序创建我的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56172751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com