c - 在包含列表的列表中搜索元素列表

标签 c data-structures tree linked-list

我有一组元素 {1,2,3},{2,3,4},{1,2,4},{7,8},{3,4,7,9},{ 12,16,18,19}, {1,2,4}。

我需要一个包含上面列表的数据结构只出现一次。如果出现任何新列表并且它与任何现有列表匹配,那么我不希望将其添加到结果数据结构中。

对于上面的例子,预期的结果应该是: {1,2,3},{2,3,4},{1,2,4},{7,8},{3,4,7,9},{12,16,18,19}。

我拥有的一个解决方案是使用 Trees。 例如:{1,2,3},{1,2,4} 在上面的列表中,我将从值为 2 的节点分支出第一个列表的值 3 和第二个列表的值 4。这样我可以从根跟踪列表并确定列表是否出现。

     Root
      |
      |
      1
      |
      |
------2------
|            |
|            |
3            4

请建议是否有任何算法可以使用 C 以简单的方式使其更快。

最佳答案

您可以使用图形数据结构来实现这一点。

要在 c 中执行此操作,您可以使用以下任一方法:

  1. 邻接矩阵

在这种方法中,您需要维护数字之间的关系矩阵,请查看下图:

Adjacency Matrix

  1. 链表:

在这个方法中,您将维护一个连接列表,即如果 2 与 1,3,4 有连接,那么将创建一个 1,3,4 的列表,其头部值为 : 2

enter image description here

这些图像取自:http://simplestcodings.blogspot.in . 您可以在同一站点上找到很好的解释和示例代码:http://simplestcodings.blogspot.in/2013/09/graphs.html链接

希望对您有所帮助。

关于c - 在包含列表的列表中搜索元素列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38850663/

相关文章:

java - 当每个实例传递唯一值时,自定义 "Node"类的两个实例都会打印相同的值

c - 此基数排序代码中的最后一个 `for` 循环有什么作用?

c - 像这样守护进程的目的是什么?

java - 优先队列与链表java

python - Python 中遗传算法的哪些数据类型?

data-structures - 跟踪递归方法的进度

python - 作为树类的列表的字典

比较字符串

在不移动文件指针的情况下检查文件指针是否已到达 EOF?

algorithm - 关联矩阵而不是邻接矩阵