gpt4 book ai didi

c - 单链表插入。

转载 作者:行者123 更新时间:2023-11-30 18:01:43 26 4
gpt4 key购买 nike

这就是我定义节点的方式:

struct node
{
char familyName[1023];
char firstName[1023];
char position;
int value;
struct node *next; // points to the next node in list
} Node;

我需要创建插入函数来检查重复的姓氏,然后根据姓氏添加玩家(忽略名字)。另外,我必须根据球员的位置对他们进行排序,所以所有守门员都会排在第一位,然后是后卫。

这就是我开始的方式,但我似乎陷入困境,不知道该怎么做。请帮忙。

struct Node* insert (struct Node *head)
{
struct Node *temp;

if (head == NULL)
{
head=(struct Node *)malloc(sizeof(struct Node));
if(head==NULL)
{
printf("Error! memory is not available\n");
exit(0);
}
}
printf(" family name: ");
safegets(head->familyName, MAX_LENGTH+1);

printf(" first name: ");
safegets(head->firstName, MAX_LENGTH+1);

printf(" position: ");
scanf("%c", &(head->position));
getchar();

printf(" value: ");
scanf("%d", &(head->value));
getchar();
}

但是,我认为我做得不正确,应该有另一个节点,它将存储姓氏、名字的位置和值,然后进行比较,然后将其添加到头部。请帮忙。

最佳答案

您必须考虑很多事情。首先,单链表是一个你事先知道的不错的数据结构吗?你知道每支球队可以有这么多球员。而且标准 C 中没有可用的预制搜索或排序功能。事实上,您至少在两个字段中“查找”:名称字段和位置字段。

如果您可以使用外部库,请查看 glib http://developer.gnome.org/glib/2.30/glib-Doubly-Linked-Lists.html例如。具有插入有序列表的功能。这在这里会非常方便。

下一个小技巧:不要使用 scanf 来获取用户的输入,最好使用 fgets 和 sscanf 的组合。

现在开始编写代码。它没有显示任何尝试在列表中保留顺序的情况。因此,您要么必须在每次插入时运行该列表。因为它是一个单链表,所以您至少需要检查当前元素名称和后面的元素名称。

假设您的列表中有 Adam -> Ben,并且您想要添加 Anton那么你必须检查名字 Adam < Anton 和你会发现 Anton < Ben。所以你必须在 Adam 和 Ben 之间插入。

为此,您需要破坏链表(伪代码(未经测试))insert_after = 亚当在=本之前插入新元素 -> 下一个 = insert_beforeinsert_after -> next = newElement....

所以你一定要小心。

关于c - 单链表插入。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9644459/

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