2022年数据结构图的建立收集 .pdf
《2022年数据结构图的建立收集 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构图的建立收集 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、戴瑞贤计算机 13-5 班 20131401702 实验十图的建立实验目的:1)理解图的基本概念,掌握用邻接矩阵和邻接表的方法描述图的存储结构。实验内容:1)建立无向图的邻接矩阵,并实现插入、删除边的功能。2)建立有向图的邻接表,并实现插入、删除边的功能。1. /* MGraph.cc: 图的邻接矩阵存储表示和实现 */ /* 包含图类型Graph 定义;创建图;深度优先遍历;广度优先遍历 */ /* 用到引用型参数,在TC下无法通过编译, VC等 C+ 编译器可通过 */ #include #include #include /含 INT_MAX #define VType char /顶点
2、值类型#define EType int /边权值类型#define MAXVNUM 50 /最大顶点个数#define DIGRAPH 0 /有向图( 网) #define UNDIGRAPH 1 /无向图( 网) #define INVALID INT_MAX /无效权值( 最大整数表示无穷大) #define EMPTY -1 /空 顶点序号/ 定义邻接矩阵表示的图类型Graph: typedef struct VType vMAXVNUM; /顶点序列 (顶点编号从0 开始 ) EType wMAXVNUMMAXVNUM; /邻接矩阵 int vn, en; /顶点数, 边数 int
3、kind; /图的种类: =DIGRAPH 表示有向图 ( 网),=UNDIGRAPH 表示无向图 ( 网) Graph; int visitedMAXVNUM; /访问标志数组(=1 已访问, =0 未访问 ) 。遍历时用到的全局量。/* 创建图 G 参数 Vex 是存放顶点序列的数组参数 VVW 是整数数组,以的形式依次存放各边的起止点序号(Vi,Vj)和权(Wij) ,-1 是数据结束标志参数kind=DIGRAPH 表示有向图 ( 网) ,=UNDIGRAPH 表示无向图 ( 网) */ void CreateGraph(Graph &G, VType *Vex, int VVW, i
4、nt kind) int i, j, p, n, w; n = strlen(Vex); G.vn = n; /顶点数 G.kind = kind; /图的种类 /置顶点序列 : for (i = 0; i n; i+) G.vi = Vexi; /初始化邻接矩阵 : for (i = 0; i n; i+) for (j = 0; j n; j+) G.wij = INVALID; /构造邻接矩阵 : p = 0; /VVW数组元素“指针” n = 0; /边计数器 while (VVWp != -1) /只要 p 未到结束位置便继续: i = VVWp; /边的起点序号 j = VVWp
5、+ 1; /边的终点序号名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - w = VVWp + 2; /边的权 G.wij = w; /置邻接矩阵的(i,j)位置元素 if (G.kind = UNDIGRAPH) /若是无向图 (网), G.wji = G.wij; /则置(i,j)的对称位置 (j,i) n+; /边计数器加1 p += 3; /p指向下一组 (Vi,Vj,Wij) /end while G.en = n; /
6、边数/CreateGraph /* 返回 G中顶点 i 的一个未曾访问过的邻接点 (序号 ) */ int NextAdjVex(Graph &G, int i) int j, a; a = EMPTY; /邻接点序号初始为 空 / 在邻接矩阵的第v 行找有效元素: for (j = 0; j G.vn; j+) if (G.wij = INVALID) /若当前元素是无效元素, continue; /则继续找。 if (!visitedj) /若当前有效元素未曾访问过, 则作为邻接点 a: a = j; break; /end if /end for return a; /NextAdjVe
7、x /* 访问顶点 i */ void visit(Graph &G, int i) printf(%c, G.vi); /visit /* 从第 i 个顶点出发深度优先遍历连通图 G */ /* 调用 DFS前可能需初始化数组visited */ void DFS(Graph &G, int i) int a; visit(G, i); /访问 i 顶点 visitedi = 1; /标注 i 顶点已访问 a = NextAdjVex(G, i); /找出一个 i的邻接点 a while (a != EMPTY) /只要 a 存在便继续 : if (visiteda = 0) /若 a 未曾
8、访问 , DFS(G, a); /则从 a 出发继续进行深度优先遍历。 a = NextAdjVex(G, i); /找出 i 的下一个邻接点a /end while /DFS /* 从第 i 个顶点出发深度优先遍历图G */ void DFSTrav(Graph &G, int i) int k; /初始化各顶点的访问标志为0( 未曾访问): for (k = 0; k G.vn; k+) visitedk = 0; DFS(G, i); /从 i 出发遍历 /若 G非连通图,执行一次DFS无法遍历所有顶点,还需用如下for 对尚未访问的顶点 DFS 。 /若 G是连通图,执行一次DFS就已
9、遍历所有顶点,此时如下for什么也不做,因所有 visited=1。 for (k = 0; k G.vn; k+) if (!visitedk) DFS(G, k); /对尚未访问的顶点DFS /DFSTrav / 显示图的邻接矩阵void ShowM(Graph &G) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - int row, col, n; n = G.vn; /顶点数 / 以表格形式输出数组: / 输出表头: p
10、rintf( ); for(col = 0; col n; col+) printf(%3d,col); printf(n); printf(-+); for(col = 0; col n; col+) printf(-); printf(n); / 输出表体 ( 矩阵元素 ) : for(row = 0; row n; row+) printf(%3d|, row); for(col = 0; col n; col+) if (G.wrowcol = INVALID) printf(%3c, *); else printf(%3d, G.wrowcol); /end for col prin
11、tf(n); /end for row printf(n); /ShowM 2. #include struct node int data; node *next; ; class list public: list()head=NULL; void MakeEmpty(); int Length(); void Insert(int x,int i);/将 x插入到第 i 个结点(不含头结点)的之后 void Insertlist(int a,int b);/将节点 b 插入 a 之前 int Delete(int x); int Remove(int i); int Find(int x
12、); void Display(); private: node *head; ; void list:Display() node *current=head; while (current!=NULL) coutdatanext; coutnext; return n; int list:Find(int x)/在链表中查找数值为 x 的结点,成功返回1,否则返回 0 node *p=head; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - -
13、- - - - - while(p!=NULL&p-data!=x) p=p-next; if(p-data=x) return 1; else return 0; void list:Insert (int x,int i)/将 x 插入到第 i 个结点(不含头结点)的之后; node *p;/p中放第 i 个结点 node *q;/q中放 i 后的结点 node *h;/h中存要插入的结点 h=new node; h-data =x; p=head; if(p-next !=NULL) /链表不是只有一个结点或者空链表时候 int n=1; while(p-next !=NULL) n+;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构图的建立收集 2022 数据 结构图 建立 收集
限制150内