我正在尝试使用嵌套列表来构建一个“库”。一切正常,我可以使用我的排序添加函数添加元素,直到我注意到,如果我连续两次显示列表,第一次一切都很好,但在第二次中,添加到目录中的"book元素“不显示,就像它们不存在一样。
struct book
{
char *title;
int number;
char *country;
struct book* new;
};
struct catalog
{
char *name;
struct catalog* next;
struct book* firstbook;
};
void printList(struct catalog *head)
{
struct catalog *temp = head;
while(temp != NULL)
{
if(temp->firstbook == NULL)
{
printf("%s\n", temp->name);
}
while(temp->firstbook != NULL)
{ printf("%s ", temp->name);
printf("%s ", temp->firstbook->title);
printf("%d ", temp->firstbook->number);
printf("%s\n", temp->firstbook->country);
temp->firstbook = temp->firstbook->new;
}
temp = temp->next;
}
}
struct book *newbook(char *booktitle, int number, char *country)
{
struct book* newbook = (struct book*) malloc(sizeof(struct book));
newbook->title = malloc(sizeof(strlen(booktitle)+1));
newbook->country = malloc(sizeof(strlen(country)+1));
newbook->title = booktitle;
newbook->country = country;
newbook->number = number;
newbook->new = NULL;
}
struct catalog *findcatalog(struct catalog** head, char *catalogname)
{
struct catalog* current;
current = *head;
while(current != NULL)
{
if(current->name == catalogname)
{
return current;
}
current = current->next;
}
}
void sortedBookInsert(struct catalog** head, char *catalogname, char *booktitle, int number, char *country)
{
struct catalog* searched;
struct book* pom;
struct book* ksiazka = newbook(booktitle, number, country);
searched = findcatalog(head, catalogname);
if(searched->firstbook == NULL || strcmp(searched->firstbook->title, ksiazka->title)>0)
{
ksiazka->new =searched->firstbook;
searched->firstbook = ksiazka;
}
else
{ pom = searched->firstbook;
while(pom->new!= NULL && strcmp(searched->firstbook->title, ksiazka->title)< 0)
{
pom = pom->new;
}
ksiazka->new = pom->new;
pom->new = ksiazka;
}
}
void sortedInsert(struct catalog** head,char *name)
{
struct catalog* current;
struct catalog* new_node = newcatalog(name);
if (*head == NULL || strcmp((*head)->name, new_node->name) > 0)
{
new_node->next = *head;
*head = new_node;
}
else
{
current = *head;
while (current->next!=NULL && strcmp(current->next->name, new_node->name) < 0)
{
current = current->next;
}
new_node->next = current->next;
current->next = new_node;
}
}
int main() {
struct catalog* head = NULL;
sortedInsert(&head, "Kappa");
sortedInsert(&head, "Aaaaaa");
sortedInsert(&head, "Sdafscx");
sortedInsert(&head, "Saxzxc");
sortedInsert(&head, "Asdas");
sortedInsert(&head, "Zzzzzzzz");
sortedInsert(&head, "Country");
sortedBookInsert(&head, "Country", "PKP", 11111, "Germany");
sortedBookInsert(&head, "Country", "Polacy", 11112, "Italy");
sortedBookInsert(&head, "Country", "Autobusy", 11234, "France");
sortedBookInsert(&head, "Country", "Polityka", 14111, "Russia");
printList(head);
printList(head);
return 0;
}
When I print my list for a second time, elements from SortedBookInsert just... are not there. I am very confused.
https://stackoverflow.com/questions/56415916
复制相似问题