图的存储结构之邻接表

什么是邻接表?

  • 邻接表(Adjacency List)是图的一种顺序存储与链式存储结合的存储方法。
  • 对于图G中的每个顶点Vi,将所有邻接于Vi的顶点Vj链成一个单链表,这个单链表就称为顶点Vi的邻接表,再将所有顶点的邻接表表头放到数组中,就构成了图的邻接表。
  • 在邻接表表示中,包括两种结点结构。
  • 一个是顶点结点,每个顶点结点由2个域组成,其中data域存储顶点Vi的名或其相关信息,firstArc指向顶点Vi的第一个邻接点的边结点;-
  • 第二个是边结点,边结点由3个域组成。其中abjVex域存放与Vi邻接的点的序号,nextArc指向Vi下一个邻接点的边结点,info域存储和边或弧相关的信息,如权值,如图6.10所示
    在这里插入图片描述
    无向图的邻接表表示如图6.11所示。
    在这里插入图片描述

为什么需要邻接表?

相比邻接矩阵,节省空间.

边结点的java实现?

class ArcNode {
    int adjVex;//存放相邻结点的序号
    ArcNode nextArc;//下一个边结点
    int weight;//权重

    public ArcNode() {
        adjVex = 0;
        weight = 0;
        nextArc = null;
    }
}

顶点的java实现

class VNode<T> {//顶点结点
    T data;//存储顶点的名称或其他相关信息
    ArcNode firstArc;//指向顶点Vi的第一个边结点

    public VNode() {
        data = null;
        firstArc = null;
    }
}

邻接表的java实现

class ArcNode {
    int adjVex;//存放相邻结点的序号
    ArcNode nextArc;//下一个边结点
    int weight;//权重

    public ArcNode() {
        adjVex = 0;
        weight = 0;
        nextArc = null;
    }
}

class VNode<T> {//顶点结点
    T data;//存储顶点的名称或其他相关信息
    ArcNode firstArc;//指向顶点Vi的第一个边结点

    public VNode() {
        data = null;
        firstArc = null;
    }
}

class AlGraph<T> {//图的邻接表数据类型
    protected final int MAXSIZE = 10;
    protected VNode[] adjList;//顶点
    int n, e;//图的顶点数和边数

    public AlGraph() {
        adjList = new VNode[MAXSIZE];//顶点列表
    }

    public void CreateLink() {
    }//创建无向图的邻接表

    public int LocateVex(T x) {
        int i;
        for (i = 0; i < n; i++) {
            if (adjList[i].data == x) return i;
            return -1;
        }
        return i;
    } //在图中查找顶点,返回其索引
}

参考

邻接矩阵和邻接表 - youngliu91 - 博客园

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭梨山大哎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值