【问题标题】:multi head linked list多头链表
【发布时间】:2013-07-23 01:26:56
【问题描述】:

我在 c 中使用链表,但我的程序实际上同时需要大量链表,所以当我想添加一个新节点时,我必须确定应该添加到哪个列表,我有一个函数它返回要添加的所需列表的头部,但我有点困惑我应该如何编写“add_node”函数,因为头节点每次都不相同,我不想使用“switch case”,因为会很长... 提前致谢

void add_it(int *array)
{
    head=which_head(array);
    curr = malloc(sizeof (node));
    memcpy(curr->nconn, array, sizeof (curr->nconn));
    curr->next = ?????????;
    ???????=curr
}

【问题讨论】:

  • 除了array之外,您的变量都没有任何类型。
  • 为什么不将所有链表一起放在一个数组中,并使用which_head函数来确定将新节点放入数组的哪个链表呢?它更像是一个带有链接的哈希图,尽管 which_head 是某种哈希函数。除非所有的链表都不同,否则别介意我的建议

标签: c linked-list


【解决方案1】:
struct Node
{
    Node *next;
    int   myData[80];
};

Node **which_head(some params);

void Add(some data)
{
    Node **head_location = whitch_head(...);
    Node *new_element = (Node*)malloc(...);

    new_element->next = *head_location;
    *head_location = new_element;
}

诀窍是你的which_head() 函数应该返回头部的位置,而不是指向列表第一个元素的指针(如果有的话)。

【讨论】:

  • 感谢您的回复,但我有点新...
  • 应该是return &head24065
【解决方案2】:

您可以将链表头保存在一个数组中或再次保存在另一个链表中。我会告诉你保持链表函数的通用性,并且不应该有处理多个列表的代码。当您需要将某个节点添加到特定链表时,您可以使用数组/链表中的函数获取它,然后使用返回的头指针指向通用链表函数。因此,您可以将处理多头问题的额外代码保留在链表例程之外。

【讨论】:

    【解决方案3】:

    如果我没有正确回答您的问题,您需要一些链接列表,每个链接列表都有不同的标题。现在您想以相同的方式访问所有链接列表。

    我的解决方案是你为什么不试试Hash Table

    尝试哈希表,您将得到解决方案。

    【讨论】:

      猜你喜欢
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 2013-09-09
      相关资源
      最近更新 更多