#include<iostream> using namespace std; #define MAX_VERTEX_NUM 50 typedef char VertexData; //定义弧结点 typedef struct EdgeNode { int adjvex; //该弧指向顶点的位置 VertexData data; EdgeNode *next; }EdgeNode; //定义表头结点 typedef struct VetexNode { VertexData data; EdgeNode *link; }VetexNode; //定义基于邻接表的图 typedef struct AdjList { int vexNun,arcNun; //定义邻接表的顶点数,弧数 VetexNode vertex[MAX_VERTEX_NUM]; }AdjList; //创建图,包含表头结点的初始化,及表头结点所指向的边链表 void CreateGraph(AdjList *adj,int *n) { int e,s,d; // 定义图的边数, s为边的起始位置(即表头结点序号)d为目的位置(即边链表结点序号) cout<<"输入顶点数(n)和边数(e)\n"; cin>>*n>>e; adj->arcNun=*n; adj->vexNun=e; EdgeNode *q=NULL; //初始化n个表头结点 for(int i=1;i<=*n;i++) { cout<<"输入第"<<i<<"个结点的信息\n"; cin>>adj->vertex[i].data; adj->vertex[i].link=NULL; } for(i=1;i<=e;i++) { cout<<"请输入边的起始与目的位置\n"; cin>>s>>d; cout<<"请输入目的结点的信息\n"; q=(EdgeNode *)malloc(sizeof(EdgeNode)); if(q==NULL) return; q->adjvex=d; cin>>q->data; q->next=adj->vertex[s].link; adj->vertex[s].link=q; } } //打印图的各个边 void DispGraph(AdjList *adj) { int n=adj->arcNun; cout<<"所有的边为:\n"; EdgeNode *q=NULL; for(int i=1;i<=n;i++) { q=adj->vertex[i].link; if(q==NULL) { cout<<"没有从"<<adj->vertex[i].data<<"出发的结点\n"; } else { cout<<"从结点"<<adj->vertex[i].data<<"出发的"<<"边是\n"; while(q!=NULL) { cout<<adj->vertex[i].data<<"->"<<q->data<<"\n"; q=q->next; } } } } int main() { int n; AdjList * adj=(AdjList *)malloc(sizeof(AdjList)); CreateGraph(adj,&n); DispGraph(adj); return 0; }
图的邻接表表示法
最新推荐文章于 2021-08-21 23:53:04 发布