在列表中搜索包含列表

时间:2016-08-09 12:23:53

标签: 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}。

我遇到的一个解决方案是使用树木。 例如:{1,2,3},{1,2,4}        在上面的列表中,我将从具有值2的节点分支出第一个列表的值3和第二个列表的值4.这样,我可以从根跟踪列表并查找列表是否出现。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

  1. 邻接矩阵
  2. 在此方法中,您需要维护数字之间的关系矩阵,请查看下图:

    Adjacency Matrix

    1. 关联列表
    2. 在这种方法中,你将保持一个连接列表,即如果2与1,3,4有连接,那么将生成1,3,4的列表,其头部值为:2

      enter image description here

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

      希望它有所帮助。