对象 - 指针图形表示的优缺点是什么? 在哪些情况下,它比邻接列表和邻接矩阵更好? 插入,删除,添加边缘,删除边缘,检查邻居,检查顶点邻居的大小有多复杂?
答案 0 :(得分:0)
如果您的意思是通过已分配的(new,malloc等)节点对象表示包含指向其他节点的指针列表,那么主要区别在于您不会自动获取对图中所有节点的引用与编号节点和邻接关系一样,存储在由节点编号索引的数组中。您通常对诸如源和/或接收器等区分节点感兴趣,因此请仅保留这些子集的列表。
当然,如果从数组中分配节点对象,那么这两种形式完全等效。
如果您的应用程序中的因素很重要,那么在64位计算机上,您可以通过在阵列中存储多达4千兆位节点来节省空间,因为您可以使用32位索引而不是64位指针来引用它们。对于调试,指数也更具可读性:节点42而不是节点位于0xf23a456792341280。
数组中邻接列表/节点的唯一缺点是删除。要从已删除的节点中获取空间,您需要将已删除的条目从数组中挤出并调整所有邻接或指针以匹配。