数据结构 | C++ 图的链式操作

本文介绍了如何在C++中使用模板实现图的链式存储,包括边类和顶点类的设计,以及深度遍历和广度遍历的算法。在构造函数中,通过链表连接顶点,实现图的构建。在深度遍历中,利用递归实现连通图遍历;而在广度遍历中,由于其特性,需要借助队列实现。在实际编程过程中,还遇到了初始化bool数组的问题并给出了解决方案。
摘要由CSDN通过智能技术生成

模板的用法:

在函数或类前

template<class T>

在函数体或类体中将需要的数据类型替换成T即可.在main()调用函数时,定义好实参的数据类型即可合法使用该函数.

模板的意义在于不必写若干函数的重载.

其中,模板声明中的"class"用"typename"更合适,'T'也可用任意字符代替

template<typename T>

ALGraph.h文件 

//邻接表
#include<vector>
#include<queue>//STL 
enum GraphType {undigraph,digraph};//定义图类型:有向图和无向图

边类和顶点类 

//边类
struct EdgeNode
{
	int adjvex;			//将结点用1,2,3...表示位置
	EdgeNode *nextnode; //指向下一个节点
	/*可有一个数据成员表示权*/
};

//顶点类
struct VexNode
{
	char data;						//顶点的值
	EdgeNode *firstedge;	//指向对应边表的头指针    
};
//注意顶点类有EdgeNode定义,所以两个结构体的顺序固定

 图类

//图类

class ALGrape
{
public:
	ALGrape(GraphType k,vector<char> vex, int v, int e);//图类型,储存各顶点值的数组,顶点数,边数
	~ALGrape();
	void DFSTraverse();								//一般图  深度优先遍历
	void BFSTraverse();								//一般图  广度优先遍历

private:
	int vexnum;							//顶点数
	int edgenum;						//边数
	vector <VexNode> vexlist ;	//顶点表
	GraphType kind;					//图的类型
	void DFS(int v, bool *visited);					//连通图  深度优先遍历
	
};

 

 构造函数算法思想:

每条边连接va,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值