《2022年用邻接表存储图并输出结果 .pdf》由会员分享,可在线阅读,更多相关《2022年用邻接表存储图并输出结果 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、/*用邻接表存储图并输出结果*/ /*常量定义及图的邻接表类型定义*/ #include #define NULL 0 /*NULL 为空指针 */ #define MAXVEX 100 /* 数组最大元素个数*/ typedef char VertexType3; typedef struct edgenode int adjvex; /* 邻接点序号 */ int value; /* 边的权值 */ struct edgenode *next; /* 下一条边的顶点*/ ArcNode; /* 每个顶点建立的单链表中结点的类型*/ typedef struct vexnode Vertex
2、Type data; /* 结点信息 */ ArcNode *firstarc; /* 指向第一条边结点*/ VHeadNode; /* 单链表的头结点类型*/ typedef struct int n,e; /*n 为实际顶点数,e 为实际边数 */ VHeadNode adjlistMAXVEX; /* 单链表头结点数组*/ AdjList; /* 图的邻接表类型*/ /*算法 6.3:图的生成邻接表函数*/ int CreateAdjList(AdjList *g) int i,b,t,w; ArcNode *p; printf(n顶点数 (n),边数 (e):); scanf(%d%d
3、,&g-n,&g-e); for (i=0; in; i+) printf( 序号为 %d的顶点信息:,i); scanf(%s,g-adjlisti.data); g-adjlisti.firstarc=NULL; for (i=0; ie; i+) printf( 序号为边 =,i); printf( 起点号终点号权值: ); scanf(%d%d%d,&b,&t,&w); if (bn & tn & w0) p=(ArcNode *)malloc(sizeof(ArcNode); p-value=w; p-adjvex=t; p-next=g-adjlistb.firstarc; g-a
4、djlistb.firstarc=p; else printf(n输入错误! ); return(0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - return(1); /*算法 6.4:输出图的邻接表函数*/ void DispAdjList(AdjList *g) int i; ArcNode *p; printf(n图的邻接表表示如下:n); for (i=0; in; i+) printf(%d,%3s=,i,g-
5、adjlisti.data); p=g-adjlisti.firstarc; while (p!=NULL) printf(%d,%d)-,p-adjvex,p-value); p=p-next; printf(n); /*主函数 */ void main() AdjList g; CreateAdjList(&g); DispAdjList(&g); system(pause); /*用邻接矩阵存储图后显示结果*/ /*常量初始化及图的邻接矩阵类型定义*/ #include #define MAXVEX 100 /* 图中最大顶点个数*/ typedef char VertexType3;
6、/* 定义 VertexType 为 char 数组类型 */ typedef struct vertex int adjvex; /* 顶点编号 */ VertexType data; /* 顶点的信息 */ VType; /* 顶点类型 */ typedef struct graph int n,e; /*n 为实际顶点数,e 为实际边数 */ VType vexsMAXVEX; /* 顶点集合 */ int edgesMAXVEXMAXVEX; /* 边的集合 */ AdjMatix; /* 图的邻接矩阵类型*/ /*算法 6.1:建立图的邻接矩阵函数*/ 名师资料总结 - - -精品资
7、料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - int CreateMatix(AdjMatix *g) int i,j,k,b,t; int w; printf(n顶点数 (n)和边数 (e):); scanf(%d%d,&g-n,&g-e); for (i=0; in; i+) printf( 序号为 %d的顶点信息:,i); scanf(%s,g-vexsi.data); g-vexsi.adjvex=i; for (i=0; in; i+) for
8、(j=0; jn; j+) g-edgesij=0; /* 将邻接矩阵元素全部置0*/ for (k=0; ke; k+) printf( 序号为 %d的边 =,k); printf( 起点号终点号权值: ); scanf(%d%d%d,&b,&t,&w); /* 输入行数,列数和权值*/ if (bn & tn & w0) g-edgesbt=w; /* 将 b 行、 t 列权值存入邻接矩阵*/ else printf(n输入错误! ); return(0); return(1); /*算法 6.2:输出邻接矩阵函数*/ void DispMatix(AdjMatix g) int i,j;
9、 printf(n图的邻接矩阵:n); for (i=0; ig.n; i+) for (j=0; jg.n; j+) printf(%3d,g.edgesij); printf(n); /*主函数 */ void main() AdjMatix g; / 注意图中顶点序号从0 开始,最大值为n-1. CreateMatix(&g); DispMatix(g); system(pause); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - -
10、- - - 二叉树#include stdlib.h #include stdio.h #include /* * 二叉树的定义,采用二叉链表作为存储结构* Binarynode 表示结点, Binarytree 表示二叉链表头指针*/ typedef struct BinaryNode char data; / 数据域struct BinaryNode *lchild; / 左指针域struct BinaryNode *rchild; / 右指针域BinaryNode,*BinaryTree; /* * 出错时调用error,显示错误提示信息. */ void error(char *s)
11、fprintf(stderr,%sn,s); exit(1); /* * 根据输入的前序遍历串创建二叉链表,返回链表的头指针t. */ BinaryTree createTree() BinaryTree bt; char ch; scanf(%c,&ch); if(ch=#) bt=NULL; else bt=(BinaryNode *)malloc(sizeof(BinaryNode); if(!bt) error(malloc fail); bt-data=ch; bt-lchild=createTree(); bt-rchild=createTree(); return bt; /*
12、* 中序遍历链表bt. */ void inOrderTraverse(BinaryTree bt) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - if(bt) inOrderTraverse(bt-lchild); printf(%c,bt-data); inOrderTraverse(bt-rchild); /* * 先序 (前序 )遍历链表bt. */ void preOrderTraverse(BinaryTree b
13、t) if(bt) printf(%c,bt-data); preOrderTraverse(bt-lchild); preOrderTraverse(bt-rchild); /* * 后序遍历链表bt. */ void postOrderTraverse(BinaryTree bt) if(bt) postOrderTraverse(bt-lchild); postOrderTraverse(bt-rchild); printf(%c,bt-data); /* * 释放链表占用的空间. */ void freeTree(BinaryTree bt) if(bt) freeTree(bt-lc
14、hild); freeTree(bt-rchild); free(bt); /* * 主程序 . */ void main() BinaryTree bt; printf( 输入前序遍历串:); / 例如 ABC#E#H#CF#IJ#K# bt=createTree(); printf(n前序序列为 :); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - preOrderTraverse(bt); printf(n中序序列为 :); inOrderTraverse(bt); printf(n后序序列为 :); postOrderTraverse(bt); printf(n); freeTree(bt); system(pause); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -