【问题标题】:How should I proceed to create an address book using a linked list?我应该如何继续使用链表创建地址簿?
【发布时间】:2014-05-13 15:54:47
【问题描述】:

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

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

不过,我还有一个问题。例如,我使用fgets() 从用户那里得到他的名字,然后将其打印到文件中,如下所示:fprintf (Addressbook, "Name: %s", addressbook.name);。当我试图从文件中读取并将预先存在的条目加载到我的链接列表中时,我将如何排除文件中的“名称:”部分?

例如,如果用户输入名称“Chris”,那么它将被写入文件中,如下所示:Name: Chris。但是在我关闭程序并再次执行它之后,我想从文件中读取并仅在addressbook.name 中加载名称“Chris”。 总的来说,我对从文件中读取并通常加载我的链表感到很困惑

任何帮助将不胜感激。感谢您的宝贵时间!

【问题讨论】:

  • 关于第二个问题,不要把Name: 放在文件里。你不是在写一些报告文件;它是一个数据存储文件。如果您希望您的 程序 显示Name: ,那是一回事,但我认为将冗余转储到磁盘没有什么意义,尤其是当它一开始就不需要时。
  • 在询问之前至少尝试something不是更好吗?然后你可以展示你到目前为止所做的尝试,并提出关于改进的问题。这将使讨论更加有趣。
  • 为什么要使用文件呢?老实说,既然你无论如何都必须提供排序功能:简单地使用数据库不是更容易吗:无论如何,MySQL C API 很容易学习

标签: c list file linked-list


【解决方案1】:

第一个问题:通讯录的链表或哈希表:
答案:SQL。真的。这种关于如何存储和检索数据的难题有一个答案,永远不要自己动手*。

*除非您是学生并正在学习如何滚动。

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

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

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

希望他们的名字中没有空格,并且文件没有损坏。完成任务就足够了。

【讨论】:

  • 我确实是 C 的学生和初学者。为什么你会说这是一次可怕的经历?就遍历列表时的执行时间而言?非常感谢您的回答。正是我想要的。
  • @user3484582 不,这是隐含的工作量。因为您要走上创建数据库的道路。有很多问题、边缘情况和一般问题需要解决。这是很多工作。如果你开发了它,并真正完善了它,你会发现你已经重新创建了类似于我们今天可用的数据库的东西,比如 SQLite。当有完美的轮子可供抓取时,老师会让你重新制作轮子。但这是了解车轮的好方法,即使您不会在现实世界中这样做。
  • 他还没有向我们提供有关我们将如何实施通讯簿的任何细节。我只是认为使用链表会更容易排序,同时我将更多地练习 C。
猜你喜欢
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多