前面实现了链表和树,现在看看图。
链表是一对一的对应关系;
树是一对多的对应关系;
图是多对多的对应关系。
图一般有两种存储方式,邻接表和邻接矩阵。
先看邻接表。
邻接表就是将图中所有的点用一个数组存储起来,并将此作为一个链表的头,
链表中保存跟这个点相邻的点(边点),如果有权值,则在边点中增加一权值字段。
// GraphList.h
链表是一对一的对应关系;
树是一对多的对应关系;
图是多对多的对应关系。
图一般有两种存储方式,邻接表和邻接矩阵。
先看邻接表。
邻接表就是将图中所有的点用一个数组存储起来,并将此作为一个链表的头,
链表中保存跟这个点相邻的点(边点),如果有权值,则在边点中增加一权值字段。
因此,有向图邻接表的空间复杂度为O(v+e),无向图加倍。
// GraphList.h
#include <iostream>#include <cstdio>using namespace std;// 边struct Edge{
int vName; int weight; struct Edge* next;};// 顶点(链表头)struct Vertex{
int vName; struct Edge* next;};// 有向图class GraphList{
public: ~GraphList();