资源描述:
《图的邻接表存储结构实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《图的邻接表存储结构实验报告》1.需解决的的问题利用邻接表存储结果,设计一种图。2.数据结构的定义typedefstructnode{//边表结点intadj;//边表结点数据域structnode*next;}node;typedefstructvnode{//顶点表结点charname[20];node*fnext;}vnode,AList[M];typedefstruct{AListList;//邻接表intv,e;//顶点树和边数}*Graph;3.程序的结构图求个点度数退出程序下一次操作建立新图(有向或无向)根据序号求节点值选择操作菜单求第
2、一、二个邻接点的序号深度遍历广度遍历4.函数的功能1)建立无向邻接表GraphCreate1()//建立无向邻接表{GraphG;inti,j,k;node*s;G=malloc(M*sizeof(vnode));printf("输入图的顶点数和边数:");scanf("%d%d",&G->v,&G->e);//读入顶点数和边数for(i=0;iv;i++)//建立顶点表{printf("请输入图第%d个元素:",i+1);scanf("%s",&G->List[i].name);//读入顶点信息G->List[i].fnext=NULL;/
3、/边表置为空表}for(k=0;ke;k++)//建立边表--建立了2倍边的结点{printf("请输入边的两顶点序号:(从0考试)");scanf("%d%d",&i,&j);//读入边(Vi,Vj)的顶点对序号s=(node*)malloc(sizeof(node));//生成边表结点s->adj=j;s->next=G->List[i].fnext;G->List[i].fnext=s;//将新结点*s插入顶点Vi的边表头部s=(node*)malloc(sizeof(node));s->adj=i;//邻接点序号为is->next=G
4、->List[j].fnext;G->List[j].fnext=s;//将新结点*s插入顶点Vj的边表头部}returnG;}2)建立有向邻接图GraphCreate2()//有向邻接图{GraphG;inti,j,k;node*q;G=malloc(M*sizeof(vnode));printf("请输入顶点数和弧数:");scanf("%d%d",&G->v,&G->e);for(i=0;iv;i++)//建立有n个顶点的顶点表{printf("请输入图第%d个元素:",i+1);scanf("%s",&G->List[i].name)
5、;//读入顶点信息G->List[i].fnext=NULL;}for(k=0;ke;k++)//建立边表{printf("请输入两顶点的序号:(从0开始)");scanf("%d%d",&i,&j);q=(node*)malloc(sizeof(node));//生成新边表结点sq->adj=j;//邻接点序号为jq->next=G->List[i].fnext;G->List[i].fnext=q;}returnG;}3)输出无向图的邻接表voidPrint1(GraphG)//输出无向图的邻接表{inti;node*p;printf("
6、ttt邻接表");for(i=0;iv;i++){p=G->List[i].fnext;printf("ttt%d
7、%3s",i,G->List[i].name);while(p){printf("->%d",p->adj);p=p->next;}printf("");}}4)输出个元素的度数voidDu(GraphG)//输出各元素的度数{inti,j;node*p;printf("ttt各点度数");for(i=0;iv;i++){p=G->List[i].fnext;printf("tt
8、t顶点%2s的度为:",G->List[i].name);j=0;while(p){j++;p=p->next;}printf("%d",j);}}5)返回图结点在的序号intLocateVex(GraphG,char*u){//初始条件:图G存在,u和G中顶点有相同的特征//操作结果:若G中存在顶点u,则返回该顶点在图中的位置;否则返回-1inti;for(i=0;iv;++i)if(strcmp(u,G->List[i].name)==0)returni;return-1;}6)返回序号为v的图结点的值char*VertexGet(
9、GraphG,intv){if(v>=G->v
10、
11、v<0)exit(0);returnG->List[v].