从邻接矩阵到邻接表:图解无向图顶点删除的5种实现方案对比

从邻接矩阵到邻接表:图解无向图顶点删除的5种实现方案对比

在软件开发中,图结构是处理复杂关系网络的基石。社交网络的好友关系、交通路网的连接状态、知识图谱的实体关联——这些场景背后都依赖高效可靠的图存储结构。当我们需要删除图中的某个节点时,不同的存储方案会展现出截然不同的性能特征。本文将深入剖析五种主流实现方案,通过可视化方式展示内存变化过程,帮助开发者根据实际场景做出最优选择。

1. 邻接矩阵:直观但低效的经典方案

邻接矩阵是最容易理解的图存储方式——用一个二维数组表示顶点间的连接关系。对于n个顶点的图,需要n×n的矩阵空间。矩阵中的每个元素a[i][j]表示顶点i与j之间是否存在边。

删除顶点时的操作步骤

  1. 在顶点数组中移除目标顶点
  2. 删除矩阵中对应的行和列
  3. 调整剩余元素的位置填补空缺
// C++示例:邻接矩阵删除顶点
void removeVertex(AMGraph &G, int v) {
    // 移动顶点数组元素
    for(int i=v; i<G.vexnum-1; i++) 
        G.vexs[i] = G.vexs[i+1];
    
    // 调整邻接矩阵
    for(int i=0; i<G.vexnum; i++) {
        for(int j=0; j<G.vexnum; j++) {
            if(i>v && j>v)
                G.arcs[i-1][j-1] = G.arcs[i][j];
            else if(i>v)
                G.arcs[i-1][j] = G.arcs[i][j];
            else if(j>v)
                G.arcs[i][j-1] = G.arcs[i][j];
        }
    }
    G.vexn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值