欢迎来到天天文库
浏览记录
ID:18963585
大小:54.00 KB
页数:22页
时间:2018-09-27
《数据结构c语言版 无向图的邻接多重表存储表示和实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数据结构C语言版无向图的邻接多重表存储表示和实现数据结构C语言版无向图的邻接多重表存储表示和实现.txt只要你要,只要我有,你还外边转什么阿老实在我身边待着就行了。 听我的就是,问那么多干嘛,我在你身边,你还走错路!跟着我!不能给你幸福是我的错,但谁让你不幸福,我TMD去砍了他 /*数据结构C语言版无向图的邻接多重表存储表示和实现P166编译环境:Dev-C++4.9.9.2日期:2011年2月15日*/#include#include#defineMAX_NAME3//顶点字符串的最大长度+1#defineMAX_INFO80//相关信息
2、字符串的最大长度+1typedefcharInfoType;typedefcharVertexType[MAX_NAME];//字符串类型//AMLGraph.h无向图的邻接多重表存储表示#defineMAX_VERTEX_NUM20typedefenum{unvisited,visited}VisitIf;typedefstructEBox{VisitIfmark;//访问标记intivex,jvex;//该边依附的两个顶点的位置structEBox*ilink,*jlink;//分别指向依附这两个顶点的下一条边InfoType*info;//该边信息指针}EBox;typed
3、efstruct{VertexTypedata;EBox*firstedge;//指向第一条依附该顶点的边}VexBox;typedefstruct{VexBoxadjmulist[MAX_VERTEX_NUM];intvexnum,edgenum;//无向图的当前顶点数和边数}AMLGraph;typedefintQElemType;//单链队列--队列的链式存储结构typedefstructQNode{QElemTypedata;//数据域structQNode*next;//指针域}QNode,*QueuePtr;typedefstruct{QueuePtrfront,//
4、队头指针,指针域指向队头元素rear;//队尾指针,指向队尾元素}LinkQueue;//若G中存在顶点u,则返回该顶点在无向图中位置;否则返回-1intLocateVex(AMLGraphG,VertexTypeu){inti;for(i=0;i5、x*p;printf("请输入无向图G的顶点数,边数,边是否含其它信息(是:1,否:0):");scanf("%d,%d,%d",&(*G).vexnum,&(*G).edgenum,&IncInfo);printf("请输入%d个顶点的值(<%d个字符):",(*G).vexnum,MAX_NAME);for(i=0;i<(*G).vexnum;++i)//构造顶点向量{scanf("%s",(*G).adjmulist[i].data);(*G).adjmulist[i].firstedge=NULL;}printf("请顺序输入每条边的两个端点(以空格作为间隔):"6、);for(k=0;k<(*G).edgenum;++k)//构造表结点链表{scanf("%s%s%*c",va,vb);//%*c吃掉回车符i=LocateVex(*G,va);//一端j=LocateVex(*G,vb);//另一端p=(EBox*)malloc(sizeof(EBox));p->mark=unvisited;//设初值p->ivex=i;p->jvex=j;p->info=NULL;p->ilink=(*G).adjmulist[i].firstedge;//插在表头(*G).adjmulist[i].firstedge=p;p->jlink=(*G).a7、djmulist[j].firstedge;//插在表头(*G).adjmulist[j].firstedge=p;if(IncInfo)//边有相关信息{printf("请输入该弧的相关信息(<%d个字符):",MAX_INFO);gets(s);l=strlen(s);if(l){p->info=(char*)malloc((l+1)*sizeof(char));strcpy(p->info,s);}}}return1;}//返回v的值VertexType*GetVex(AM
5、x*p;printf("请输入无向图G的顶点数,边数,边是否含其它信息(是:1,否:0):");scanf("%d,%d,%d",&(*G).vexnum,&(*G).edgenum,&IncInfo);printf("请输入%d个顶点的值(<%d个字符):",(*G).vexnum,MAX_NAME);for(i=0;i<(*G).vexnum;++i)//构造顶点向量{scanf("%s",(*G).adjmulist[i].data);(*G).adjmulist[i].firstedge=NULL;}printf("请顺序输入每条边的两个端点(以空格作为间隔):"
6、);for(k=0;k<(*G).edgenum;++k)//构造表结点链表{scanf("%s%s%*c",va,vb);//%*c吃掉回车符i=LocateVex(*G,va);//一端j=LocateVex(*G,vb);//另一端p=(EBox*)malloc(sizeof(EBox));p->mark=unvisited;//设初值p->ivex=i;p->jvex=j;p->info=NULL;p->ilink=(*G).adjmulist[i].firstedge;//插在表头(*G).adjmulist[i].firstedge=p;p->jlink=(*G).a
7、djmulist[j].firstedge;//插在表头(*G).adjmulist[j].firstedge=p;if(IncInfo)//边有相关信息{printf("请输入该弧的相关信息(<%d个字符):",MAX_INFO);gets(s);l=strlen(s);if(l){p->info=(char*)malloc((l+1)*sizeof(char));strcpy(p->info,s);}}}return1;}//返回v的值VertexType*GetVex(AM
此文档下载收益归作者所有