【发布时间】:2021-07-14 23:45:47
【问题描述】:
我有这个 csv 文件:
NAME, NUMBER, ADDRESS, EMAIL
Kevin, +62 812-xxx-xxx, Jln.Anggrek Merah 3, kevin@gmail.com
Adwi, +62 821-xxxx-xxxx, Jln.Ruhui Rahayu, adwi@gmail.com
Wasis, +62 813-xxxx-xxxx, Jln.Pramuka 6 25, wasis@gmail.com
Alief, +62 811-xxxx-xxx, Jln.Padat Karya, alief@gmail.com
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 50
typedef struct Contact
{
char name[MAX];
char number[MAX];
char address[MAX];
char email[MAX];
struct Contact *next;
}
Contact;
void create_linkedList(Contact **start, Contact p)
{
Contact *new = malloc(sizeof(Contact));
strcpy(new->name, p.name);
strcpy(new->number, p.number);
strcpy(new->address, p.address);
strcpy(new->email, p.email);
new->next = *start;
*start = new;
}
void printList(Contact *start)
{
Contact *cursor = start;
while (cursor != NULL)
{
printf("%s\n", cursor->name);
cursor = cursor->next;
}
}
void sorting(Contact *start)
{
Contact *cursor = start, *traverse = NULL;
Contact *tmp, *tmp_next;
while (cursor != NULL)
{
traverse = cursor;
while (traverse->next != NULL)
{
if (strcasecmp(traverse->name, traverse->next->name) > 0)
{
tmp = traverse;
tmp_next = traverse->next->next;
traverse->next = tmp;
traverse->next->next = tmp_next;
}
traverse = traverse->next;
}
printf("Prepare!\n");
cursor = cursor->next;
}
}
int main(void)
{
FILE *file = fopen("contacts.csv", "r");
if (file == NULL)
return 1;
Contact person;
Contact *start = NULL;
// Loop inside csv file til' the end of file
while(fscanf(file, "%[^,], %[^,], %[^,], %[^\n] ", person.name, person.number, person.address, person.email) == 4)
{
# Skip header file from csv
if (strcmp("NAME", person.name) == 0)
continue;
create_linkedList(&start, person);
}
printList(start);
// Swapped
sorting(start);
printList(start);
return 0;
}
所以,在我成功创建了一个链接列表来连接我的 csv 文件中的每个人数据后,我想按他们的名字对其进行排序,然后打印出来。但是如果你编译我的代码,就会导致分段错误。
在我的sort() 函数中,我尝试更改每个人的node (next)。因为我认为如果我只交换每个元素的值,node (next) 仍然会像以前一样指向同一个人。所以我在想也许我只能交换node (next)。
如果它只是对数组中的值进行排序,我可以做到。但是链表对于初学者来说很难。
你能帮帮我吗?也许给我写一些新代码并解释解决方案,如果你们有的话。谢谢!
【问题讨论】:
标签: c sorting linked-list