【问题标题】:Simple redundance in a linked list链表中的简单冗余
【发布时间】:2018-08-14 06:45:27
【问题描述】:

所以我有以下结构:

typedef struct listElement
{
   element value;
   struct listElement;
} listElement, *List;

element 不是已知类型,这意味着我不确切知道我正在处理的数据类型是整数还是浮点数或字符串。 目标是制作一个函数,删除多余两次以上的listElements(意味着一个值只能出现0次,一次或两次,不能更多) 我已经制作了一个使用暴力破解的函数,带有一个嵌套循环,但这是一个集群****,因为我正在处理列表中的大量元素。 (遍历每个元素并将其与列表中的其余元素进行比较) 我想知道是否有更好的解决方案,使用更少的指令并且具有更低的复杂性。

【问题讨论】:

  • 结构声明无效。我认为您的意思是数据成员 struct listElement; *下一个;
  • 如果您必须根据列表验证元素,那么听起来您需要 BST,而不是链表。
  • struct listElement *next; 也许?? (因为它是一个列表......)对于*List,您需要查看:Is it a good idea to typedef pointers?。

标签: c algorithm linked-list


【解决方案1】:

您可以使用哈希表并将元素映射到它们的计数。

如果 hashTable[element](此特定元素的计数)返回 2,则删除当前元素。

【讨论】:

  • AFAIK 地图是 C++ 独有的,我正在开发一个使用纯 C 的程序。
  • @Turismo98,我不是在谈论 std::map,我是在谈论使用哈希表将一种元素映射到另一种元素。哈希表是计算机科学中的标准数据结构,可以用任何语言实现。上网查一下如何实现哈希表,其实并不难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
相关资源
最近更新 更多