版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 设 计课程:数据结构题目:图11(邻接表)班级:信管08级姓名:xxxxxx学号:xxxxxxxx设计时间:2010年01月10日2010年05月10日成绩:指导教师:xxxxxxxx 一、题目题目图11结构邻接表表示顶点链的头指针回传方式指针的指针操作图的基本操作二、概要设计1. 存储结构typedef struct vnode /顶点结构 char d; /顶点信息struct lnode *h; /邻接表表头struct vnode *next; /指向下一个顶点char ch; /遍历过程中访问标记*net;struct lnode /邻接表结点结构 struct vnode
2、*a; /出端 struct lnode *next; /指向下一个邻接点;图的邻接表存储(顶点链):h 顶点 入端地址 入端地址 2 .设计要点(1) net ins_v(net *g,char v) /插入顶点 (2) net ins_e(net *g,char u,char v,float c) /插入边(3) net deleteedge(net *g,char vertex1, char vertex2)/删除边(4) net deletevertex(net *g,char vertex)/删除顶点(5) void out1(net *g) /输出(6) void out2(net
3、 *g) /输出(7) net creat1(net *g) /创建图(8) net creat2(net *g) /创建图(9) net dfs(net *g,char vertex)/广度优先遍历(10) net bfsm(net *g,vnode &_ver)/深度优先遍历(11) net dfsl(net*g)/深度优先遍历以邻接表存储的图g3 存储要点(1) 创建图net creat1(net *g) /创建net p=new vnode;(2) 插入顶点:net ins_v(net g,char v):通过扫描图的顶点链表,找到链表的尾部,在尾部添加一个顶点。(3)插入边:net
4、ins_e(net g,char u,char v):找到边顶点的地址,在相应的顶点下,将地址添加到链表中,一般追加到链表的尾部。四 源程序#includeusing namespace std;typedef struct vnode /顶点结构 char d; /顶点信息struct lnode *h; /邻接表表头struct vnode *next; /指向下一个顶点char ch; /遍历过程中访问标记*net;struct lnode /邻接表结点结构 struct vnode *a; /出端地址 struct lnode *next; /指向下一个邻接点;struct qnode
5、 / 图的广度优先遍历,用到队列,再次定义队列 vnode * ver;qnode * next;struct lqnodeqnode * front;qnode * rear;class queuepublic :queue();queue();bool emptyqueue();void addqueuenodevertex(qnode * nv);vnode * deletequeuenodevertex();private:lqnode *lq;queue:queue()this-lq=null;queue:queue() bool queue:emptyqueue()if(this-
6、lq=null)return 1;elsereturn 0;void queue:addqueuenodevertex(qnode * nv)qnode * p;p=new qnode;p-ver=(*nv)-ver;p-next=null;if(this-lq = null)this-lq=new lqnode;this-lq-front=p;this-lq-rear=p;elsethis-lq-rear-next=p;this-lq-rear=p;vnode * queue:deletequeuenodevertex()if(this-emptyqueue()cout对空!lq-front
7、 = this-lq-rear)vnode * q;q=this-lq-front-ver;delete this-lq-front;delete this-lq;this-lq=null;return q;elsevnode * q;qnode * p=this-lq-front;this-lq-front=this-lq-front-next;q=p-ver;delete p;return q;net ins_v(net *g,char v) /插入顶点 net _g = *g;if(*g = null)net p=new vnode;p-next=*g;*g=p;(*g)-h=0;(*g
8、)-d=v;(*g)-ch = 0;elsewhile(_g-d != v & _g-next != null)_g=_g-next;if(_g-next = null)net p=new vnode;p-next=*g;*g=p;(*g)-h=0;(*g)-d=v;(*g)-ch = 0;elsecoutd!=u)p=p-next;while(q&q-d!=v)q=q-next;r=new lnode;r-next=p-h;r-a=q;p-h=r;return *g;void out1(net *g) /输出net p=*g;lnode *q;while(p)cout顶点dh;if(q)co
9、uta-dnext;while(q)couta-dnext;coutnext;void out2(net *g) /输出net p=*g;lnode *q;while(p)cout顶点dh;if(q)couta-dnext;while(q)couta-dnext;coutnext;net creat1(net *g) /创建图*g=ins_v(g,d);*g=ins_v(g,c);*g=ins_v(g,b); *g=ins_v(g,a);*g=ins_e(g,a,b,8);*g=ins_e(g,a,c,7);*g=ins_e(g,b,c,6);*g=ins_e(g,c,d,5);*g=ins_
10、e(g,d,a,6);return *g;net creat2(net *g) /创建图*g=ins_v(g,p);*g=ins_v(g,l);*g=ins_v(g,q); *g=ins_v(g,n); *g=ins_v(g,m);*g=ins_e(g,m,n,6);*g=ins_e(g,m,q,8);*g=ins_e(g,n,q,9);*g=ins_e(g,q,l,6);*g=ins_e(g,l,p,5); *g=ins_e(g,p,m,4);return *g;void visit(char vertex)coutvertexnext != null & ne-a != &ver2)ne=
11、ne-next;if(ne-a = &ver2)return 1;elsereturn 0;net dfs(net *g,char vertex)/ ver1 指向当前接点所在vnode * ver1=null;vnode * ver= *g;while(ver-d !=vertex & ver-next !=null)ver=ver-next;if(ver-next = null & ver-d !=vertex)cout输入顶点数据错误,程序退出!h = null)m=null;elsene=ver1-h;/ m 指向邻接点链表的头结点m=new node;m-ver=ne-a;m-nex
12、t=null;n=m;while(ne-next != null)node * l=new node;l-ver=ne-next-a;l-next=null;n-next=l;n=l;ne=ne-next;ver=*g;while(ver != null)if(ver != ver1)if(judgementindegree(*ver,*ver1)node * ll=new node;ll-ver=ver;ll-next=null;if(n=null)n=ll;m=n;elsen-next=ll;ver=ver-next;node * k;k=m;ver1-ch=1;visit(ver1-d)
13、;for(k=m;k!=null;k=k-next)if(k-ver-ch=0)dfs(g,k-ver-d);return *g;net bfsm(net *g,vnode &_ver)vnode * _g = *g;do_g-ch = 0;_g = _g-next;while(_g != null);queue que;vnode * h;visit(_ver.d);_ver.ch=1;qnode * p=new qnode;p-ver=&_ver;que.addqueuenodevertex(&p);while(que.emptyqueue() != 1)h=que.deletequeue
14、nodevertex();qnode * m=null;qnode * n=null;vnode * ver;lnode * ne=null;if(h-h = null)m=null;elsene=h-h;/ m 指向邻接点链表的头结点m=new qnode;m-ver=ne-a;m-next=null;n=m;while(ne-next != null)/*n-vnext=ne-enext-edge;n=ne-enext-edge;ne=ne-enext;*/qnode * l=new qnode;l-ver=ne-next-a;l-next=null;n-next=l;n=l;ne=ne-
15、next;ver=*g;while(ver != null)if(ver != h)if(judgementindegree(*ver,*h)qnode * ll=new qnode;ll-ver=ver;ll-next=null;if(n=null)n=ll;m=n;elsen-next=ll;ver=ver-next;qnode * a;/qnode * b;a=m;while(a != null)if(a-ver-ch = 0)visit(a-ver-d);a-ver-ch=1;que.addqueuenodevertex(&a);a=a-next;return *g;net delet
16、eedge(net *g,char vertex1, char vertex2)vnode * na=null;vnode * nb=null;lnode * ea=null;lnode * eb=null;/ na指向当前vertex1接点na=*g;while(na-d != vertex1)na=na-next;/ 起始接点的边集ea=na-h;/ 第一个接点是目标接点if(ea-a-d = vertex2)/ 第一种情况为边集next为空if(ea-next = null)delete ea;na-h=null;/ 第二种情况为边集next不为空elsena-h=ea-next;del
17、ete ea;/ 第一个接点不是目标接点else/ ea 是目标接点/ eb 是前驱接点eb=ea;while(ea-a-d != vertex2)eb=ea;ea=ea-next;if(ea-a-d = vertex2)if(ea-next = null)eb-next=null;delete ea;elseif(ea-next != null)eb-next=ea-next;delete ea;return *g;net deletevertex(net *g,char vertex)/ ver1 指向当前接点所在vnode * ver1=null;vnode * ver=*g;vnode
18、 * q=ver;while(ver-d !=vertex & ver-d !=null)q=ver;ver=ver-next;if(ver-next = null & ver-d !=vertex)cout输入顶点数据错误,程序退出!h = null)m=null;elsene=ver1-h;/ m 指向邻接点链表的头结点m=new node;m-ver=ne-a;m-next=null;n=m;while(ne-next != null)/*n-vnext=ne-enext-edge;n=ne-enext-edge;ne=ne-enext;*/node * l=new node;l-ver
19、=ne-next-a;l-next=null;n-next=l;n=l;ne=ne-next;k=n;ver=*g;while(ver != null)if(ver != ver1)if(judgementindegree(*ver,*ver1)node * ll=new node;ll-ver=ver;ll-next=null;if(n=null)n=ll;c=n;elsen-next=ll;c=ll;n=ll;ver=ver-next;node * a=null;node * b=null;a=m;while(a != k)deleteedge(g,vertex,a-ver-d);a=a-next;while(c != null)deleteedge(g,c-ver-d,vertex);c=c-next;q-next
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年消防器材智能化改造升级服务合同2篇
- 2024租赁合同签订程序及条件
- 2025年拓展训练合同范本大全:企业团队凝聚力提升计划3篇
- 二零二四年度2024年三人健身产业合作合同6篇
- 2025年洗车场车辆停放管理及承包合同3篇
- 2025版航空航天专用铝合金采购合同书4篇
- 二零二四年云服务器租赁与智能运维合同3篇
- 个人汽车租赁合同样本 2024年版版B版
- 2025年度临时临时设施租赁合同标准范本4篇
- 2025年无偿使用政府办公楼场地举办会议合同范本3篇
- 非诚不找小品台词
- 2024年3月江苏省考公务员面试题(B类)及参考答案
- 患者信息保密法律法规解读
- 老年人护理风险防控PPT
- 充电桩采购安装投标方案(技术方案)
- 医院科室考勤表
- 镀膜员工述职报告
- 春节期间化工企业安全生产注意安全生产
- 保险行业加强清廉文化建设
- Hive数据仓库技术与应用
- 数字的秘密生活:最有趣的50个数学故事
评论
0/150
提交评论