首页 > 编程语言 >C++图的邻接表创建

C++图的邻接表创建

时间:2023-12-18 20:36:04浏览次数:26  
标签:struct int 创建 nd Vertex C++ next 邻接 Graph

C++图的邻接表存储结构


typedef struct Node{
	int nextVex;
	struct Node *next;
	
} *node;
struct HeadNode{
	E element;
	struct Node *next;
};
typedef struct GraphTable{
	int vex,edge;
	struct HeadNode Vertex[MAXV];
} *Graph;

图的创建函数

Graph create(){
	Graph graph= (Graph)malloc(sizeof(struct GraphTable));
	graph->edge=graph->vex=0;
	return graph;	
}

图的节点添加与边添加函数

void addVex(Graph g,E e){
	g->Vertex[g->vex].element=e;
	g->Vertex[g->vex].next=NULL;
	g->vex++;
}
int getIndexByElem(Graph g,E v){
	int i=0;
	while(true){
	if(g->Vertex[i].element==v)
		return i;	
	i++;
	}
	
}
void addEdge(Graph g,E v1,E v2){
	int a=getIndexByElem(g,v1);
	int b=getIndexByElem(g,v2);
	node nd=g->Vertex[a].next;
	node newNode=(node)malloc(sizeof(struct Node));
	newNode->next=NULL;
	newNode->nextVex=b;
	if(!nd){
		g->Vertex[a].next=newNode;
	}else{
		do{
			if(nd->nextVex==b)return;
			if(nd->next){
			nd = nd->next;
			}
			else break;
		}while(1);
		nd->next=newNode;
	}
	g->edge++;	
}

打印出邻接表

printGraph(Graph g){
	for(int i=0;i<g->vex;++i){
		cout<<i<<" "<<g->Vertex[i].element;
		node nd = g->Vertex[i].next;
		while(nd){
			cout<<"->"<<nd->nextVex;
			nd=nd->next;
		}
		cout<<endl;
	}
}

主函数展示

int main(){
	Graph graph = create();
	for (int c ='A';c<='D';++c)
		addVex(graph,(char)c);
	addEdge(graph,'A','B');
	addEdge(graph,'B','C');
	addEdge(graph,'C','D');
	addEdge(graph,'D','A');
	addEdge(graph,'C','A');
    printGraph(graph);
	return 0;
}

标签:struct,int,创建,nd,Vertex,C++,next,邻接,Graph
From: https://www.cnblogs.com/Happy-Eric-1/p/17912163.html

相关文章

  • 29道C++ 面向对象高频题整理(附答案背诵版)
    1、什么是类?在C++中,类是一种用户定义的数据类型,它可以包含数据成员和函数成员。数据成员用于存储与类相关的状态,而函数成员可以定义对这些数据进行操作的方法。可以把类想象为一个蓝图,根据这个蓝图可以创建对象,这些对象在内存中是类的实例。比如说,我们可以定义一个Car类来表示汽......
  • 2023最新中级难度C++面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度C++面试题合集问:什么是虚函数和纯虚函数?它们有什么区别?虚函数是一种在基类中声明的函数,它可以在派生类中被覆盖以实现多态性。纯虚函数是一种特殊的虚函数,它没有定义任何具体的行为,只声明了一个接口。纯虚函数的目的是为了让......
  • 2023最新高级难度C++面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度C++面试题合集问:详细解释一下C++中的虚继承(virtualinheritance)的概念及其应用场景。虚继承是一种特殊的继承方式,用于解决多重继承中可能出现的菱形继承问题。菱形继承会导致基类被复制多次,占用额外的内存,并可能导致数据混乱......
  • pyqt5 子窗口的创建,以及主窗口和子窗口的通信
    使用designer画好ui,注意选择dialog对话框然后将ui文件转换成py目标和源文件换成你自己的pyuic5-oqt_hgbp.pyhtbp_autotest.ui主窗口调用子窗口方法一:常规调用,importsysfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QDialog##引入主窗口ui转py文件fr......
  • 创建rabbitmq用户时报错
    报错内容如下:Error:unabletoperformanoperationonnode'rabbit@bogon'.Pleaseseediagnosticsinformationandsuggestionsbelow.Mostcommonreasonsforthisare:Targetnodeisunreachable(e.g.duetohostnameresolution,TCPconnectionorfirewal......
  • Linux下4种快速创建大文件的方法
    1.使用dd命令创建大文件dd命令是实际写入硬盘,文件产生的速度取决于硬盘的读写速度,根据文件的大小,该命令将需要一些时间才能完成。创建一个名为test.img的2GB大小的文本文件,执行以下操作:ddif=/dev/zeroof=test.imgbs=2Gcount=1其中根据需要来更改块大小和块数。例如,......
  • C++ new与delete
    C++new与delete在C语言中,动态分配内存时一般常使用malloc()函数,但是对于非内置数据类型(如struct、enum、class),malloc()与free()无法满足动态对象的需求,因此C++引入new与delete关键字,用来进行内存申请与释放空间。1.new运算符new运算符用来申请一块连续的内存,其格式如下:new......
  • 万字长文全面详解现代C++智能指针:原理、应用和陷阱
    现代C++智能指针详解:原理、应用和陷阱智能指针是C++11引入的新特性。本篇文章详细介绍了C++智能指针的原理、应用与陷阱,通过丰富的代码实例介绍了三种智能指针:std::unique_ptr、std::shared_ptr和std::weak_ptr的原理、使用方法和适用场景,还介绍了智能指针的线程安全性、使用陷阱......
  • 关于`.Net Core`捕捉`C/C++`中的异常
    结论开门见山的说,.NetCore无法捕捉在C/C++编写的Dll中的方法的异常和错误。说明在.NetFramework框架期间,可以通过为方法增加特性:HandleProcessCorruptedStateExceptionsAttribute,或者使用RuntimeWrapperException捕捉运行时的错误,但是在.NetCore框架中,上述特性已经不再生......
  • 在Python中,你可以使用面向对象的方法来创建一个甘特图的模板。以下是一个使用`matplot
    在Python中,你可以使用`matplotlib`或者`plotly`库来制作甘特图¹²⁴⁵。以下是一些示例:**使用matplotlib制作甘特图**¹:```pythonimportmatplotlib.pyplotasplt#设置字体和负号显示plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=F......