问题:还是把邻接表的结构体定义搞明白,就没那么难了^^
代码:
#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;
}
运行截图: