图的邻接表存储结构实验报告_第1页
图的邻接表存储结构实验报告_第2页
图的邻接表存储结构实验报告_第3页
图的邻接表存储结构实验报告_第4页
图的邻接表存储结构实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图的邻接表存储结构实验报告1.需解决的的问题 利用邻接表存储结果,设计一种图。2.数据结构的定义typedef struct node/边表结点int adj;/边表结点数据域struct node *next;node;typedef struct vnode/顶点表结点char name20;node *fnext;vnode,AListM;typedef structAList List;/邻接表int v,e;/顶点树和边数*Graph;3.程序的结构图求个点度数退出程序下一次操作建立新图(有向或无向)根据序号求节点值选择操作菜单求第一、二个邻接点的序号深度遍历广度遍历4.函数的功能1)建立无向邻接表Graph Create1( )/建立无向邻接表Graph G;int i,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-L);/读入顶点信息G-Listi.fnext=NULL;/边表置为空表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-Listi.fnext;G-Listi.fnext=s;/将新结点*s插入顶点Vi的边表头部s=(node *)malloc(sizeof(node);s-adj=i;/邻接点序号为is-next=G-Listj.fnext;G-Listj.fnext=s;/ 将新结点*s插入顶点Vj的边表头部 return G;2)建立有向邻接图Graph Create2() /有向邻接图Graph G;int i,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-L); /读入顶点信息G-Listi.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-Listi.fnext; G-Listi.fnext=q; return G;3)输出无向图的邻接表void Print1(Graph G)/输出无向图的邻接表int i;node *p;printf(nttt邻接表n);for(i=0;iv;i+)p=G-Listi.fnext;printf(ttt%d | %3s,i,G-L);while(p)printf(-%d,p-adj);p=p-next;printf(n);4)输出个元素的度数void Du(Graph G)/输出各元素的度数int i,j;node *p;printf(nttt各点度数n);for(i=0;iv;i+)p=G-Listi.fnext;printf(ttt顶点%2s的度为:,G-L);j=0;while(p)j+;p=p-next;printf(%dn,j);5)返回图结点在的序号int LocateVex(Graph G,char *u)/初始条件:图G存在,u和G中顶点有相同的特征/操作结果:若G中存在顶点u,则返回该顶点在图中的位置;否则返回-1int i;for(i=0;iv;+i)if(strcmp(u,G-L)=0)return i;return -1;6)返回序号为v的图结点的值char *VertexGet(Graph G,int v)if(v=G-v|vL;7)返回图结点v的第一个邻接顶点的序号int FirstAdjVex(Graph G,char *v)/初始条件:图G存在,v是G中的某个顶点/操作结果:返回v中第一个邻接顶点的序号。若顶点在G中没有邻接顶点/则返回-1node *p;int v1;v1=LocateVex(G,v);p=G-Listv1.fnext;if(p)return p-adj;elsereturn -1;8)找到图结点v的第二个邻接顶点的序号void NextAdjVex(Graph G,char *v,char *w)/初始条件:图G存在,v是G中某个顶点,w是v得邻接点/操作结果:输出v的(相对于w的)下一个邻接点的序号node *p;int v1,w1;v1=LocateVex(G,v);w1=LocateVex(G,w);p=G-Listv1.fnext;while(p&p-adj!=w1)p=p-next;if(!p|!p-next)printf(没有第二个邻接点!n);elseprintf(第二个邻接点序号是:%dn,p-next-adj);9)深度优先遍历图void DFS(Graph G,int i,int flag)node *p;printf(%2s ,G-L);flagi=1;p=G-Listi.fnext;while(p)if(!flagp-adj)DFS(G,p-adj,flag);p=p-next;void DFSTravel(Graph G)/深度优先遍历int i;int flagM;/标志数组for(i=0;iv;i+)flagi=0;for(i=0;iv;i+)if(!flagi)DFS(G,i,flag);10)广度优先遍历void BFSTravel(Graph G)/广度优先遍历Queue Q;node *p;int i,j=0;int flagM;/标志数组Q=malloc(sizeof(M);InitQueue(Q);for(i=0;iv;i+)flagi=0;for(i=0;iv;i+)if(flagi=0)/此点未被访问flagi=1;printf(%2s ,G-L);Enter(Q,i);while(Q-front!=Q-rear)Leave(Q,j);/队头元素出队并置为jp=G-Listj.fnext;while(p!=NULL)if(flagp-adj=0)printf(%2s ,G-L);flagp-adj=1;Enter(Q,p-adj);/ifp=p-next;/while/while/if5.输入/输出数据1)选择操作2)选择“1”然后输入“3 3”输入“a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论