我知道这可能是一个非常少年的问题,但是我在C#中学习链接列表,并且他们不断引用节点,我在某种程度上直观地了解节点,但我从来没有得到过对节点究竟是什么的正式解释,特别是在这种情况下,有人能给我一个关于中等简单英语节点定义的概述吗?
我已经读过这个:https://msdn.microsoft.com/en-us/library/microsoft.computecluster.node(v=vs.85).aspx但它并没有多大帮助,因为它使用了我还不太了解的其他概念/术语。
谢谢!
答案 0 :(得分:9)
获取白板。
画出一堆盒子。
将它们连接在一起。
也许在方框和线条中加上一些标签。
也许在线上放一些箭头。
您绘制的内容称为“图形”。图形由节点 - 框 - 和边组成,它们将它们连接在一起。节点有时也称为“顶点”。
几乎表示数据的每个问题都会减少到某种图形。
您想找到城市之间的最佳路线吗?制作一个图表,其中节点是城市,边缘是道路,问题是“这两个节点之间边缘的最短路径是什么?”
您想设计一个数据中心吗?将其设计为图形,其中节点是计算机,边缘是连接它们的网络电缆。
等等。
链表只是一个非常非常非常的简单图表。链表只是一个图表:
所以
1 ---> 2 ----> 3 ----> empty
是一个链表,其中1,2,3,空是节点,边缘用箭头表示。请注意,这符合链表的定义;空没有外出箭头,1没有传入箭头,每个其他节点有一个传出箭头和一个传入箭头。
现在想象放宽链表的条件。
一个非循环图,其中只有一个节点具有零输入边(称为根),而每个其他节点只有一个输入边称为“树”。每个链表都是一棵树,但不是每棵树都是一个链表:
1
/ \
| |
v v
2 3
这是一棵树,但不是链表。
如果我们考虑没有周期的图形,但也没有限制我们可以添加的边缘,那么我们有一个有向无环图或DAG。每棵树都是DAG;不是每个DAG都是树。例如:
1 2 ---> 3 <---- 4
是DAG,但不是链接列表或树。
等等。图论是一个巨大的学科,是计算机科学的基础。就像我说的那样,表示数据的几乎所有问题都可以被认为是某种图形,所以“节点”的概念在编程中到处都是 。
答案 1 :(得分:1)