5.1图的物理结构与基本操作

1.图的物理结构

一.邻接矩阵存储稠密图

在这里插入图片描述

用于存储无向图,有向图,总之各类图
优缺点:适合存储稠密图,属于上下三角矩阵,有重复
复杂度:O(V),空间O(V^2)

性质:阶乘得到某一点的值,为顶点到另外一个顶点的长度为阶乘数的数目,
很容易类比得到

//存储无向图
#define MaxVertexNum 100
typedef struct{
    char Vex[MaxVertexNum];//顶点数
    int Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵
    int vexnum,arcnum;//顶点数,弧数
}MGraph;
//存储带权图
#define MaxVertexNum 100
#define INFINITY (最大的int的值) //取这个值表示宏定义常量为无穷
typedef char VertexType;
typedef int EdgeType;
typedef struct{
    VertexType Vex[MaxVertexNum];
    EdgeType Edge[MaxVertexNum][MaxVertexNum];
    int vexnum,arcnum;
}MGraph;

二.邻接表存储稀疏图

在这里插入图片描述

边节点的数目:2|E|,因为有重复,比较适合存储稀疏图
优缺点:对于有向图不友好,整体时间复杂度 O(|V|+2|E|)

//1.顶点结构
typedef struct VNode{
    VertexType data; //顶点的信息
    ArcNode *first; //第一条边/弧
}VNode,AdjList[MaxVertexNum];
//2.边
typedef struct{
int adjvex;
struct ArcNode *next;
//InfoType info; //边的权值
}ArcNode;
//3.邻接表的结构
typedef struct{
    AdjList vertices;
    int vexnum,arcnum;
}ALGraph;

三.十字链表存储有向图

示意图

代码实现:
代码实现十字链表法

//边界点结构体
struct Node{
    int from;
    int to;
    struct Node* in_pointer;
    struct Node* out_pointer;
}
//十字链表法结构
struct Cross_List
{
    int vex;
    int edge;
    struct{
        char hede_ele;
        struct Node* in_pointer;
        struct Node* out_pointer;
    }
}

四. 临接多重表存储无向图

在这里插入图片描述

2.图的基本操作

主要实现方式再于邻接表与邻接矩阵,并且可以分析判断时间复杂度

1.判断边是否存在

Adjacent(G,x,y);

2.列出图结点邻接的边

Neighbors(G,x);

3.插入新节点

InsertVertex(G,x);

4.删除图的某一顶点

DeleteVertex(G,x);

5.添加图的一条边

AddEdge(G,x,y);

6.(重要)找到图中顶点的第一个邻接点

FirstNeighbor(G,x);

7.(重要)找到图中除y的下一个邻接点

NextNeighbor(G,x,y);

8.获取某条边的权值

Get_edge_value(G,x,y);

9.设置某条边的权值

Set_edge_value(G,x,y,v);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值