数据结构关键路径及十字链表基本操作课程设计报告.docxVIP

  • 27
  • 0
  • 约1.16万字
  • 约 17页
  • 2016-12-03 发布于重庆
  • 举报

数据结构关键路径及十字链表基本操作课程设计报告.docx

数据结构关键路径及十字链表基本操作课程设计报告

数据结构课程设计报告 小组成员:王瑞琦薇 倩 组课题: 1-1有向图十字链表的操作2-5 关键路径 有向图十字链表的操作功能概述将有向图以是十字链表的形式存储,并借助十字链表对有向图进行查找有向图中指定结点的度(出度和入度)、插入有向边和删除有向边等操作。模块简介创建有向图十字链表:void creat_crosslink(ALGraph *G,char vex[],int n,etype edge[],int e)查找结点在十字链表中的位置:int LocateVex(ALGraph *G,Vertex u) 插入指定边:bool InsertArc(ALGraph *G,etype a)删除指定边:bool DeletetArc(ALGraph *G,etype a)查找有向图中指定结点的度(出度和入度):int Count(ALGraph *G,Vertex u)数据类型/*边的数据类型*/typedef struct{ char vi,vj; int info; }etype;/*弧结点数据类型*/typedef struct ArcNode{int tailvex,headvex;/* 该弧的尾和头顶点的位置 */ struct ArcNode *hlink,*tlink;/* 分别为弧头相同和弧尾相同的弧的链域 */ InfoType info;/*若为网络则为权值*/}ArcNode;/*表头结点数据类型*/typedef struct VexNode{Vertex data; ArcNode *firstin,*firstout; /* 指向该顶点的第一条入弧和出弧 */}VexNode;typedef VexNode AdjList[MAXV];/*十字链表数据类型*/typedef struct{ AdjList adjlist; int n,e;/*图中顶点数n和边数e*/}ALGraph;概要设计CreateDG(建表)(1)获取有向图的顶点数、弧数并存入;(2)依次获取各顶点的值,存入数组,构建十字链表头结点向量组;(3)依次获取弧信息,存入,确认弧结点在十字链表中的位置并对弧赋值;(4)十字链表创建成功;LocateVex(查找)传参:有向图,顶点利用指针依次扫描表头数组,当找到该顶点时,返回该顶点在十字链表表头数组的位置(序号),未找到该顶点时,返回-1。Count(求度)传参:有向图,顶点调用LocateVex(),找到顶点的位置,利用tlink指针依次扫描以该顶点为弧尾的边,统计该顶点的出度,利用hlink指针依次扫描以该顶点为弧头的边,统计该顶点的入度,那么该顶点的度为入度加出度。InsertArc(插入边)传参:有向图,边调用LocateVex(),找到顶点的位置,建立新的存储空间,对新存储空间赋值,通过修改tlink和hlink,将新结点放入十字链表。bool DeletetArc(ALGraph *G,etype a)传参:有向图,边调用LocateVex(),找到顶点的位置,通过修改指针,将指定的边结点从十字链表中删除,同时释放存储空间。详细设计(源代码)/*建立十字链表*/void creat_crosslink(ALGraph *G,char vex[],int n,etype edge[],int e){ArcNode *p;G=(ALGraph *)malloc(sizeof(ALGraph));G-n=n;G-e=e;int k,i,j;for (i=0;in;i++)/*置入各表头结点(即顶点)*/{G-adjlist[i].firstin=NULL;G-adjlist[i].firstout=NULL;G-adjlist[i].data=vex[i];}for(k=0;ke;k++)/*先建立邻接表*/{i=0; while(G-adjlist[i].data !=edge[k].vi) i++;j=0;while(G-adjlist[j].data !=edge[k].vj)j++; p=(ArcNode *)malloc(sizeof(ArcNode));p-headvex=i+1;//始边顶点(数组元素第一个序号为0)p-tailvex=j+1;//终边顶点p-info=edge[k].info;//权值p-hlink=G-adjlist[i].firstout;//建立弧头链表p-tlink=G-adjlist[j].firstin;//建立弧尾链表G-adjlist[i].firstout=G-adjlist[j].firstin=p;//头插}}/*查找指定顶点的位置(序号)*/int

文档评论(0)

1亿VIP精品文档

相关文档