数据结构——图的基本操作

——本节内容为Bilibili王道考研《数据结构》P58视频内容笔记。


目录

一、总览

二、基本操作

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.NextNeighbor(G,x,y)

8.Get_edge_value(G,x,y)和Set_edge_value(G,x,y,v)


一、总览

1.

2.本节只讨论邻接矩阵邻接表的存储方式;

 


 二、基本操作

1.Adjacent(G,x,y)

(1)功能:判断图G是否存在边<x,y> 或(x,y)。

(2)无向图:

        ①邻接矩阵:找到x行y列对应元素并判断是否为1;时间复杂度O(1)。

        ②邻接表:查找x的边结点有没有y;最好情况:第一个就是;最坏情况:最后一个也不是;时间复杂度O(1)~O(|V|)。

(3)有向图:

        ①邻接矩阵:方法同无向图;时间复杂度O(1)。

        ②邻接表:方法同无向图;时间复杂度O(1)~O(|V|)。

(4)无向有向图都采用邻接矩阵更好。


2.Neighbors(G,x)

(1)功能:列出图G中与结点x邻接的边。

(2)无向图:

        ①邻接矩阵:找到x行中所有为1的元素对应的边列举出来;时间复杂度O(|V|)。

        ②邻接表:遍历边结点链表;最好情况:一条边;最坏情况:|V-1|条边;时间复杂度O(1)~O(|V|)。

(3)有向图:

        ①邻接矩阵:方法同无向图(出度找行,入度找列);时间复杂度O(|V|)。

        ②邻接表:出度遍历链表(同无向图),入度遍历所有边结点;时间复杂度:出度O(1)~O(|V|);入度O(|E|)。

(4)无向图采用邻接表;有向图如果是稀疏图则采用邻接表,稠密图采用邻接矩阵。


3.InsertVertex(G,x)

(1)功能:在图G中插入顶点x。

(2)无向图:

        ①邻接矩阵:由于矩阵置零在初始化完成,所以写入新元素信息即可;时间复杂度O(1)。

        ②邻接表:写入新元素信息,*first置为NULL;时间复杂度O(1)。

(3)有向图同无向图一样。


4.DeleteVertex(G,x)

(1)功能:从图G中删除顶点x。

(2)无向图:

        ①邻接矩阵:将x对应的行列元素全部置零,用bool标记x所在的顶点结构体;时间复杂度O(|V|)。

        ②邻接表:将x对应的边结点删除,*first置空;时间复杂度O(1)~O(|E|)。

(3)有向图:

        ①邻接矩阵:同无向图。

        ②邻接表:删除出边:同邻接表;删除入边:遍历所有弧结点;删出边时间复杂度O(1)~O(|V|);删入边时间复杂度O(|E|)。


5.AddEdge(G,x,y)

(1)功能:若无向边(x,y)或有向边<x,y>不存在,则向图G中添加该边。

(2)无向图:

        ①邻接矩阵:已知坐标直接改值;时间复杂度O(1)。

        ②邻接表:头插法插入到x和y的*first位置;时间复杂度O(1)~O(|V|)。

(3)有向图同无向图。


6.FirstNeighbor(G,x)

(1)功能:求图G中顶点x的第一个邻接点,若有则返回顶点号。若x没有邻接点或图中不存在x则返回-1。

(2)无向图:

        ①邻接矩阵:遍历x行直到找到第一个1;时间复杂度O(1)~O(|V|)。

        ②邻接表:找到边结点链表的第一个结点;时间复杂度O(1)。

(3)有向图:

        ①邻接矩阵:同无向图,出边找行,入边找列;时间复杂度O(1)~O(|V|)。

        ②邻接表:出边同无向图,入边遍历所有弧结点;出边时间复杂度O(1),入边时间复杂度O(1)~O(|E|)。


7.NextNeighbor(G,x,y)

(1)功能:假设图G中顶点y是顶点x的一个邻接点,返回除y之外顶点x的下一个邻接点的顶点号,若y是x的最后一个邻接点则返回-1。

(2)无向图:

        ①邻接矩阵:按行扫描x行y列下一个1;时间复杂度O(1)~O(|V|)。

        ②邻接表:扫描y结点的下一个边结点;时间复杂度O(1)。

(3)有向图同无向图。


8.Get_edge_value(G,x,y)和Set_edge_value(G,x,y,v)

(1)功能:

        ①Get_edge_value(G,x,y):获取图G中边(x,y)或<x,y>对应的权值;

        ②Set_edge_value(G,x,y,v):设置图G中边(x,y)或<x,y>对应的权值为v。

(2)核心在于找边或弧,即Adjacent(G,x,y);

(3)时间复杂度:

        ①Get_edge_value(G,x,y):O(1);

        ②Set_edge_value(G,x,y,v):O(1)~O(|V|)。

猜你喜欢

转载自blog.csdn.net/weixin_64084604/article/details/128346087
今日推荐