【问题标题】:How to use linked list to store a table and search for items in the table in C++C++中如何使用链表存储表并在表中搜索项目
【发布时间】:2011-12-06 03:52:38
【问题描述】:

我在本地驱动器上保存了一个 .txt 文件,该文件由 3 列和多行组成,第一列是字符,第二列是数字,第三列是日期。如何使用 linked list(不使用 STL)编写程序来存储此文件,然后通过让用户从第一列输入信息来搜索特定条目,以便计算机会从表中找到它并在该行中显示信息吗?

【问题讨论】:

  • ¤ 这个练习的要点大概是自己实现一个链表。然后让它变得简单:一个没有修饰的单链表。由于 C++ 支持引用参数,因此您可以通过定义函数 Node* unlink( Node*& p ) 来极大地简化事情,然后您可以使用节点的 next 指针作为参数调用该函数。还有一个函数void linkInAfter( Node& node, Node* p )。所有这些都意味着您需要定义一个名为Node 的类型。请注意,链表与给定问题的理想结构相去甚远,但作为家庭作业,它是可以的。干杯&hth.,

标签: c++ search linked-list


【解决方案1】:

一个简单的方法是使用这样的结构:

struct Row
{
    char * name;
    int    id;
    time_t date;

    Row * next;
};
Row * table = NULL;

此结构将存储 .txt 文件的一行和指向下一行的指针。这使它成为一个链表。 table 变量将指向列表的头部——第一行。

要存储列表,您需要遍历表格并将每一行写入一个带有fprintf 的新行。

for (Row * row = table; row != NULL; row = row->next)
    fprintf(file, "%s %i %i", row->name, row->id, row->date);

要在列表中搜索,您将遍历表并将目标字符串与每行的name 成员(或您所称的任何名称)进行比较。使用链表,您几乎只能进行顺序搜索。

for (Row * row = table; row != NULL; row = row->next)
    if (0 == stcmp(row->name, targetString))
        return row;

我假设您在课堂上介绍了用户输入和基本列表算法。如果您有任何问题,请随时询问。

【讨论】:

  • 非常感谢!不过,你能解释一下这段代码到底做了什么吗?谢谢!
【解决方案2】:

您可以在 c++ 中查看以下概念,然后解决您的问题

  1. File Handling
  2. Linked Lists :此维基百科条目及其外部链接将帮助您了解链表的基本操作。
  3. 搜索:您可以实施您选择的搜索算法来查找所需的信息。像线性搜索这样的基本搜索算法就足够了。 整合这些概念并解决您的问题!

可以使用Don Reba的结构来实现链表的节点

【讨论】:

  • 不能对列表使用二分搜索。
  • @DonReba 哦,是的,必须对列表进行排序。我已经编辑了我的答案。谢谢!
  • @DonReba 在webdocs.cs.ualberta.ca/~holte/T26/binary-search.html 的链表上了解二进制搜索中的问题我已经编辑了我的答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
相关资源
最近更新 更多