邻接表存储无向图

问题:还是把邻接表的结构体定义搞明白,就没那么难了^^

代码:

#include <iostream>
#include <cstdlib>
using namespace std;

#define MAXV 20
typedef struct edgeNode       //边表节点
{
	int data;
	struct edgeNode *next;
}edgeList;

typedef struct headNode      //头节点
{
	char vex;
	edgeList *firstedge;
}headList;

typedef struct adjNode       //邻接表
{
	headList adjArr[MAXV];
	int n,e;                //图顶点数和边数
}*adjGraph;

void createAdjGraph(adjGraph &ag)
{
	char c;
	int p,q;
	edgeList *s;
	edgeList *m;
	cout<<"please input the the num of n and e:";
	cin>>ag->n>>ag->e;
	for(int i=0;i<ag->n;i++)
	{
		cin>>c;
		ag->adjArr[i].vex=c;
		ag->adjArr[i].firstedge=NULL;
		getchar();
	}

	for(int j=0;j<ag->e;j++)
	{
		cout<<"please input adj vexs:";
		cin>>p>>q;
		s=(edgeList*)malloc(sizeof(struct edgeNode));
		if(!s)
			return;
		s->data=p;
		s->next=ag->adjArr[q].firstedge;
		ag->adjArr[q].firstedge=s;

		m=(edgeList*)malloc(sizeof(struct edgeNode));
		if(!m)
			return;
		m->data=q;
		m->next=ag->adjArr[p].firstedge;
		ag->adjArr[p].firstedge=m;
	}


}

void showAdjGraph(adjGraph ag)
{
	for(int i=0;i<ag->n;i++)
	{
		cout<<ag->adjArr[i].vex<<":";
		while(ag->adjArr[i].firstedge!=NULL)
		{
			cout<<ag->adjArr[i].firstedge->data<<" ";
			ag->adjArr[i].firstedge=ag->adjArr[i].firstedge->next;
		}
		cout<<endl;
	}
}
int main()
{
	adjGraph ag;
	ag=(adjGraph)malloc(sizeof(struct adjNode));
	if(!ag)
		return -1;
	cout<<"创建邻接表:"<<endl;
	createAdjGraph(ag);
	cout<<"输出邻接表:"<<endl;
	showAdjGraph(ag);
	return 0;
}

 运行截图:

原文地址:https://www.cnblogs.com/xshang/p/3069706.html