【问题标题】:How to make an array of arrays in C?如何在C中制作数组数组?
【发布时间】:2013-03-09 07:08:39
【问题描述】:

是否可以在 C 中创建一个数组数组? 更具体地说,是否可以制作邻接列表(数组)的列表(数组)?

如果是这样,怎么做?

我的教科书使用 Dijkstra 算法(以及许多其他算法)的邻接列表列表,而不是使用邻接矩阵,尽管这本书是伪代码,即使如此,它也没有任何关于如何实现列表的参考...

据推测,在很多算法中,邻接列表列表比邻接矩阵更有效。我曾想过使用链表,但 AFAIK 它与使用邻接矩阵相同,因此以这种方式实现它根本没有意义......

【问题讨论】:

标签: c


【解决方案1】:

你是说多维数组吗?

int mdarr[10][20];

【讨论】:

  • 不,这就是我们所说的矩阵。在我的书中,函数“dijkstra”获取一个一维数组作为参数,“Adj[]”,它是一个邻接列表列表。这就是他们操纵它的方式,用伪代码:“int u = [some_number]; int v; for each v in Adj[u] do ...”
  • 其中 Adj[u] 应该是顶点 'u' 的邻接列表,整数 'v' 是这个列表的元素。我对如何在 C 中做到这一点一无所知。
  • @CarpeNoctem 我没有看到你的问题。您是否在询问如何实现特定的数据结构?还是什么?
  • 我在问如何实现一个数组,其中数组的每个元素都是一个邻接列表。这本书没有说任何关于创建新结构的内容:我们被教导如何在数组中创建邻接列表,但它没有解释如何创建 ~array~,如果每个元素都是这些列表之一,那就是我正在寻求帮助。
  • 说真的,那就是 ^他想要什么-_-
【解决方案2】:

是否可以在 C 中创建数组数组?

是的。

更具体地说,是否可以制作一个邻接列表(数组) 列表(数组)?

是的,它可以使用链表的链表(或您的情况下的数组)来实现。

如果是这样,怎么做?

一个列表(或数组)可以维护节点,每个节点都将指向实际的邻接列表以及包含有关图形当前点的信息。这可以通过创建一个带有相关数据的struct 来实现(一个信息字段和一个next 指针,以及一个指向邻接列表的指针)

第二个列表将是每个节点的实际邻接列表。它将由第一个列表的相应节点指向。它将包含节点,每个节点都是连接到初始列表中相应点的图形点。它可以类似地实现,通过创建一个具有相关数据的struct(一个字段用于下一个指针,一个信息字段)。

这不是多维数组而是完全不同的。如果您的图是稀疏的,这将比邻接矩阵使用更少的空间。

例如,让ABCD 成为无向图的节点,使得A 连接到BC

那么列表将是这样的:

A -> B -> C -> D
|    |    |
B    A    A
|
C

【讨论】:

    【解决方案3】:

    你的意思是一个三维数组吗?

    你定义一个像这样 aMat[3][3] 的邻接矩阵(三个元素的图)。

    因此,您可以定义例如 4 个由三个元素组成的图,每个图如下:aMatMulti[4][3][3]。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-14
      • 2017-08-18
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 2016-06-11
      相关资源
      最近更新 更多