邻接表存储无向图

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

 

代码:

#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;

}

 运行截图:

邻接表存储无向图

你可能感兴趣的:(存储)