【问题标题】:Which data structure to use for nodes in Java?Java中的节点使用哪种数据结构?
【发布时间】:2013-11-22 01:15:04
【问题描述】:

我想创建一个类节点、类 Edge 和类 Graph。在类节点中,必须将某个数字作为输入来创建节点。另外,我希望这个类具有可以更改节点不同属性的方法。此外,它必须包含一种通过 Edge 从其相邻节点发送和接收信息的方法。这些信息接收和发送方法应具有控制信息流的规定。

我不确定节点使用哪种数据结构来满足这些要求。

【问题讨论】:

  • 使用上述方法和所需属性创建一个类。您将需要在图表中存储多个节点。通常,您希望能够从图中删除/添加节点,因此如果您的节点类名为 Node,则需要像 LinkedList 这样的动态数据结构。
  • 你能建议我实施吗?像如何编写程序的示例一样?

标签: java data-structures nodes


【解决方案1】:

创建一个class Node,它具有您想要的所有属性。 例如如果你想为binary Tree 创建一个Node 你的Node class 可以是这样的。

  class Node
     {
        Node left;
        Node right;
        int info;
        Node(int value)
        {
         this.info = value;
        }
        //Add more attributes or functionalities
     }

这是您如何创建Node class 的一种表示形式。根据您的要求,表示可能会发生变化,但基本概念保持不变。

【讨论】:

  • 变量信息代表什么?
  • 当您创建Node 时,您需要在其中存储一些信息,对吗?变量info 就是为了这个目的。
  • 如果我可以补充@Prateek 所说的话,很多时候如果您使用二叉树,不仅有“左节点”和“右节点”,还有“节点父节点” " 这样就可以遍历树以获取类似迭代器的东西。再次,仅供参考
【解决方案2】:

创建您自己的类节点。

节点只是一个对象。给它一些属性(对于您的示例,您可能需要权重和价值)。

public class Node{

    private double weight;
    private String value;
    private ArrayList<Node> edges;


//setters and getters
}

【讨论】:

  • 权重是否暗示“它连接到多少个节点”?另外,我可以使用 Scanner 从输入中接受节点数吗?
【解决方案3】:

创建一个类节点,它具有对其他节点的引用列表(在有向图中,这特别有用)。边缘实际上并不是要创建的“事物”——它更像是一种连接。

【讨论】:

    【解决方案4】:

    实现图的两种最常见的方法是使用邻接矩阵或邻接列表。

    矩阵方法涉及使用二维数组通过询问node[i][j] 是否为真来确定节点i 和节点j 是否连接。浪费空间,但有固定的时间访问。

    邻接列表跟踪当前节点的每个相邻节点,这样可以节省空间,但会花费线性时间来确定节点是否连接到它。

    这些文章解释得更好:

    Matrix

    List

    【讨论】:

      猜你喜欢
      • 2011-11-18
      • 2012-07-25
      • 1970-01-01
      • 2017-10-27
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多