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