gpt4 book ai didi

c - 单链表简单数据库

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

我想弄清楚如何使用单链表创建数据库。我想保留 1 个节点(例如 1 个客户端),但很少有项目在 3 天之内无法弄清楚,现在我该怎么做,这是我尝试如何做到这一点的一个示例。也尝试在客户端内嵌套项目列表,但也失败了。因此,如果有人愿意提供示例或准确说明我应该在这段代码中纠正哪些内容,或者可能为我的问题提供更好的答案,那就太好了,谢谢。

#include <stdio.h>
#include <stdlib.h>
struct item
{
char item_name[30];
struct item *next;
};
struct client
{
char name[30];
char last_name[30];
struct client *next;
};
struct node
{
int NodeNr;
struct item *HeadItem;
struct item *TailItem;
struct client *HeadClient;
struct client *TailClient;
struct node *next;
};
struct client *create_node()
{
int x;
char name[30];
struct client *data = malloc(sizeof(struct client));
printf("Name: ");
scanf("%s",name);
strcpy(data->name,name);
printf("Last Name: ");
scanf("%s",name);
strcpy(data->last_name,name);
printf("Person : %s %s is added.\n", data->name,data->last_name);
return data;
}
struct node *AddClient(struct node *HeadNode,struct client *data)
{
if(HeadNode->HeadClient = NULL)
{
HeadNode -> HeadClient = data;
HeadNode -> TailClient = data;
data ->next = NULL;
HeadNode -> next = NULL;

}
else
{
data -> next = NULL;
HeadNode-> next -> TailClient = data;
HeadNode -> TailClient = data;
}
return HeadNode;
}
struct node *Display (struct node *HeadNode)
{
while(HeadNode->HeadClient =! NULL)
{
printf("%s",HeadNode->HeadClient->name,HeadNode->HeadClient->last_name);
HeadNode->HeadClient =HeadNode->HeadClient->next;
}
return 0;
}
int main()
{
struct node *temp;
AddClient(temp,create_node());
}

最佳答案

好的,第一步:打开编译器警告。这将出现以下错误:

if(HeadNode->HeadClient = NULL) ...

这应该与 == 进行比较。很容易混淆赋值 = 和相等比较 ==,C 语言允许这样做。

while(HeadNode->HeadClient =! NULL) ...

这也很容易被忽视:不等式的比较是 != ,感叹号在前。 (助记:这意味着 ! 不等于 =)。您已经交换了符号并有效地创建了两个运算符:将 !NULL 的值分配 (=) 到 HeadNode->HeadClient。 “not null”的值为 1,这使得条件始终为 true。这意味着循环将永远运行 - 如果0x1是一个有效的指针。但事实并非如此,因此在取消引用 HeadNode->HeadClient 时程序崩溃了。

printf("%s\n",
HeadNode->HeadClient->name, HeadNode->HeadClient->last_name);

格式字符串中有一个格式说明符,格式后面有两个参数。这并不像相反那么糟糕,但不是您想要的。

您真正的问题是您从 main 传递的头节点 temp 未初始化。 AddClient 的工作方式需要引用它,因此将其初始化为 NULL 不会有帮助。您必须将其初始化为一些数据,这可能涉及 malloc

最好重新组织您的程序,以由 NULL 指针表示的空列表开始。另外,您应该为每个新节点分配内存,但您没有这样做。您的函数 AddClient 应该将一个新节点(具有自己新分配的内存)附加到列表的末尾。它应该确保最后一项的next指针为NULL

当添加第一个节点时,您将更改头指针。因此,您必须要么将指向节点的指针传递给函数,要么必须返回头指针的新值,以便更改将反射(reflect)在后续调用中

此外,创建节点的例程称为AddClient,创建客户端的例程称为create_node。这就是灾难的根源!

关于c - 单链表简单数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21140507/

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