C 如何使用链接列表创建通讯簿?

C 如何使用链接列表创建通讯簿?,c,list,file,linked-list,C,List,File,Linked List,所以我有一个任务,用C语言建立一个通讯录,每次程序关闭时数据都会被保存,所以我必须使用文件。此外,我还必须从地址簿文件中读取任何已经存在的条目。该程序还应提供按姓名、姓氏、电子邮件等进行排序的选项 我想用一个链表来实现这一点。问题是我不确定我应该使用链表还是哈希表。因为通过使用哈希表,我不知道如何对数据进行排序。使用链表并仅通过更改指向下一个条目的指针进行排序可以吗 不过我还有一个问题。比如说,我使用fgets从用户那里得到他的名字,然后像这样打印到文件中:fprintf Addressbook

所以我有一个任务,用C语言建立一个通讯录,每次程序关闭时数据都会被保存,所以我必须使用文件。此外,我还必须从地址簿文件中读取任何已经存在的条目。该程序还应提供按姓名、姓氏、电子邮件等进行排序的选项

我想用一个链表来实现这一点。问题是我不确定我应该使用链表还是哈希表。因为通过使用哈希表,我不知道如何对数据进行排序。使用链表并仅通过更改指向下一个条目的指针进行排序可以吗

不过我还有一个问题。比如说,我使用fgets从用户那里得到他的名字,然后像这样打印到文件中:fprintf Addressbook,name:%s,Addressbook.name;。当我试图从文件中读取并将预先存在的条目加载到我的链接列表中时,如何排除文件中的名称:part

fscanf(f_file, "Name: %s", nameArrayTypeThing);
例如,如果用户输入名称Chris,那么它将像这样写入文件:name:Chris。但是在我关闭程序并再次执行它之后,我想从文件中读取并只在addressbook.name中加载名称Chris。 总的来说,我对读取文件和加载链接列表感到非常困惑


任何帮助都将不胜感激。谢谢你抽出时间

第一个问题:通讯簿的链表或哈希表: 答复:。真正地这类关于如何存储和检索数据的难题有一个答案,你永远不会自己解决*

*除非你是一名学生,正在学习如何滚动

你是谁。这是一项任务。所以这两种选择都是错误的,但既然这只是一个学习练习,那就去做吧。随便什么人。是的,每次你想用不同的参数对节点进行排序时,使用一个链表并重新排列节点。这听起来很有趣,但也很可怕

第二个问题:当我试图从文件中读取并将预先存在的条目加载到我的链接列表中时,我将如何排除文件中的Name:part

fscanf(f_file, "Name: %s", nameArrayTypeThing);

希望他们的名字中没有空格,并且文件没有损坏。对于作业来说,这就足够了。

关于第二个问题,首先不要在文件中写上Name:。你不是在写报告文件;它是一个数据存储文件。如果你想让你的程序显示Name:这是一回事,但我觉得把冗余转储到磁盘上没有什么意义,尤其是当它一开始就不需要的时候。如果你在询问之前至少尝试一下,不是更好吗?然后,你可以展示你迄今为止所做的尝试,并提出有关重要性的问题。这会引起更有趣的讨论。为什么还要麻烦使用文件呢?老实说,既然你必须提供排序功能,那么简单地使用数据库不是更容易吗?MySQL C API很容易学习。我确实是C语言的学生和初学者。你为什么说这是一次可怕的经历?在遍历列表时的执行时间方面?非常感谢你的回答。正是我要找的。@user3484582不,这是隐含的工作量。因为您正在沿着创建数据库的道路前进。有许多问题、边缘案例和一般问题需要解决。这是一项艰巨的工作。如果您开发了这个,并对它进行了真正的润色,您会发现您已经重新创建了类似于我们今天提供的数据库的东西,比如SQLite。当有非常好的轮子可以抓的时候,老师让你重做轮子。但这是一个了解轮子的好方法,即使你在现实世界中不会这么做。他还没有告诉我们如何实现地址簿的任何细节。我只是认为使用链表将更容易排序,同时我将更多地使用C。