【问题标题】:Comparing items in a linked list比较链表中的项目
【发布时间】:2021-07-11 22:18:27
【问题描述】:

我想编写一个打印链表重复项的程序。列表定义如下:

typedef struct node
{
    char *name;
    char *num[10];
    struct node* next;
    
}node;

我想根据存储电话号码字符串的 num 数组来比较它们。我的问题是,每个节点可能不一定有相同数量的电话号码,有些可能有一个,有些可能有 10 个。有人可以告诉我,如果任何节点有一个共同的号码,我将如何找到?

【问题讨论】:

  • 你需要退后一步。您的设计需要指定如何确定给定单个节点的有效电话号码的计数。那是你的设计决定。一些示例:为计数存储一个额外字段或使用 NULL 条目终止数组。
  • 一旦您指定了有效计数的指示方式,它就会成为标准搜索问题。你应该研究搜索算法。蛮力方法是迭代一个节点中的每个数字,并将其与另一个节点中的每个数字进行比较。
  • 忘记链表。你能写一个函数来比较一个电话号码和另一个电话号码并返回共享数字的数量吗?
  • 这个问题太笼统了。首先解决如何在电话号码字符串中找到给定的电话号码。

标签: arrays c linked-list


【解决方案1】:

这是一个简单的方法:

  1. 定义一个struct { char* name; char* num; };
  2. malloc() 一个可容纳 10 * length(list) 结构的数组。
  3. 遍历链表,将每个电话号码及其关联名称复制到数组中。您需要定义 10 个电话号码槽中的一些为空意味着什么(例如,未使用的电话号码可能为 NULL)。
  4. 按电话号码字符串内容对数组进行排序(使用qsort()strcmp())。
  5. 遍历数组,在每一步都记住您看到的最后一个电话号码,并打印与前一个条目匹配的任何号码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多