对象图的优点和缺点

Object Graphs pros and cons

对象指针图表示的优缺点是什么? 在哪些情况下它比邻接表和邻接矩阵更好? 插入、删除、添加边、删除边、检查邻居、检查顶点的邻居大小的复杂度是多少?

如果您的意思是通过包含指向其他节点的指针列表的已分配(新的、malloc 等)节点对象表示,那么主要区别在于您不会自动获取对图中所有节点的引用正如您对存储在由节点编号索引的数组中的编号节点和邻接所做的那样。您通常对源 and/or 接收器等特殊节点感兴趣,因此只保留这些子集的列表。

当然,如果你从数组中分配节点对象,那么这两种形式是完全等价的。

如果 2 的因数在您的应用程序中很重要,在 64 位计算机上,您可以通过在数组中存储最多 4 个千兆节点来节省 space,因为您可以使用 32 位索引而不是引用它们64 位指针。索引对于调试也更具可读性:节点 42 而不是 0xf23a456792341280 处的节点。

数组中邻接 list/nodes 的唯一缺点是删除。要从删除的节点中取回 space,您需要将删除的条目从数组中挤出并调整所有邻接或指针以匹配。