第03基本数据结构与运算精选文档.ppt
《第03基本数据结构与运算精选文档.ppt》由会员分享,可在线阅读,更多相关《第03基本数据结构与运算精选文档.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第03基本数据结构与运算基本数据结构与运算本讲稿第一页,共五十页3.6.1 图的基本概念图的基本概念BACD63215数据结构数据结构 B=B=(D D,R R)图:图:G=G=(V V,E E)顶点顶点:图中的数据元素图中的数据元素V V:表示:表示顶顶点的非空有限集合。点的非空有限集合。E E:表示两个:表示两个顶顶点之间关系的集合。点之间关系的集合。图的定义、术语图的定义、术语本讲稿第二页,共五十页图图有向图有向图无向图无向图在有向图中,在有向图中,V 表示从表示从V V1 1到到V V3 3的一条弧。的一条弧。V V1 1为弧尾或初始点,为弧尾或初始点,V V3 3为弧头或终端点。为
2、弧头或终端点。在无向图中,在无向图中,(V(V1 1,V V3 3)表示表示V V1 1和和V V3 3之间的一条边之间的一条边。V1V3V2V4V1V3V2V4图的定义、术语图的定义、术语本讲稿第三页,共五十页V1V3V2V4V1V3V2V4顶点集合顶点集合V=V1,V2,V3,V4 弧的集合弧的集合G=,顶点集合顶点集合V=V1,V2,V3,V4 边的集合边的集合E=(V1,V3),(V1,V2),(V1,V4),(V2,V4)G=(V,E)顶点顶点(V1,V3)与与(V3,V1)表示同一条边表示同一条边图的定义、术语图的定义、术语本讲稿第四页,共五十页BACD63215权权:与图的边或弧
3、相关的数。:与图的边或弧相关的数。顶点的度顶点的度:依附于该顶点的边数或弧数。:依附于该顶点的边数或弧数。出度出度:(仅对有向图)以该顶点为尾的弧数。:(仅对有向图)以该顶点为尾的弧数。入度入度:(仅对有向图)以该顶点为头的弧数。:(仅对有向图)以该顶点为头的弧数。路径路径:顶点:顶点A A与顶点与顶点C C之间存在一条路径。路径上边或弧的数目之间存在一条路径。路径上边或弧的数目 称为该路径的路径长度。称为该路径的路径长度。连通图连通图:无向图任意两顶点都有路径(:无向图任意两顶点都有路径(没有孤立顶点)没有孤立顶点)没有孤立顶点)没有孤立顶点)强连通图强连通图:有向图有向图任意两顶点都有路径
4、任意两顶点都有路径网网网网:带权的图称为网:带权的图称为网:带权的图称为网:带权的图称为网图的定义、术语图的定义、术语本讲稿第五页,共五十页图的存储图的存储 邻接矩阵邻接矩阵n3.6.2 图的存储图的存储n n1.邻接矩阵法邻接矩阵法uu(1 1)给顶点编号)给顶点编号)给顶点编号)给顶点编号uu(2 2)建立邻接(关系)矩阵)建立邻接(关系)矩阵)建立邻接(关系)矩阵)建立邻接(关系)矩阵21431 2 3 41 2 3 40 0 0 01 0 1 11 0 0 10 1 1 0a a i j i j表示弧表示弧 ij 1 1:表示有弧;:表示有弧;0:0:表示无弧表示无弧任意顶点的出度是该
5、行元素之和任意顶点的出度是该行元素之和任意顶点的出度是该行元素之和任意顶点的出度是该行元素之和任意顶点的入度是该列元素之和任意顶点的入度是该列元素之和任意顶点的入度是该列元素之和任意顶点的入度是该列元素之和本讲稿第六页,共五十页图的存储图的存储 邻接矩阵邻接矩阵uu邻接矩阵的优点:邻接矩阵的优点:增减边的操作简单增减边的操作简单uu邻接矩阵的缺点:邻接矩阵的缺点:增减顶点的操作需要搬移大量的元素,增减顶点的操作需要搬移大量的元素,浪费存储空间浪费存储空间21431 2 3 41 2 3 41 1 2 2 3 3 4 40 1 1 01 0 1 11 1 0 10 1 1 0无向图的邻接矩阵是对
6、称的无向图的邻接矩阵是对称的无向图的邻接矩阵是对称的无向图的邻接矩阵是对称的本讲稿第七页,共五十页图的存储图的存储 邻接矩阵的实现邻接矩阵的实现n n图的邻接矩阵实现图的邻接矩阵实现typedef struct graph_mtypedef struct graph_melemtype nodeMAXNUM;elemtype nodeMAXNUM;int arcsMAXNUMMAXNUM;int arcsMAXNUMMAXNUM;graph_m;graph_m;顶点集合顶点集合顶点集合顶点集合边的邻接矩阵边的邻接矩阵边的邻接矩阵边的邻接矩阵二维数组二维数组本讲稿第八页,共五十页图的存储图的存储
7、 邻接表邻接表n n2.邻接表法邻接表法uu一个邻接表由两种结构组成一个邻接表由两种结构组成存放各顶点元素的数组,头结点存放各顶点元素的数组,头结点各顶点各自的邻接链表,邻接结点各顶点各自的邻接链表,邻接结点2143231 data2data3data4data134124233data顶点号顶点号元素域元素域邻接链表邻接链表头指针头指针2邻接顶点号邻接顶点号下一邻接结点下一邻接结点本讲稿第九页,共五十页图的存储(课堂练习)图的存储(课堂练习)n n请写出下面这副图的邻接表请写出下面这副图的邻接表uu1)给顶点编号)给顶点编号uu2)建立顶点数组)建立顶点数组uu3)建立各顶点的邻接链表)建立
8、各顶点的邻接链表注意,此图为有向图注意,此图为有向图2 21 13 34 45 51datadata2datadata3datadata4datadata5datadata2313514本讲稿第十页,共五十页图的存储图的存储 邻接表的实现邻接表的实现n n邻接表的定义邻接表的定义uu头结点的定义头结点的定义uu邻接结点的定义邻接结点的定义顶点号顶点号元素域元素域与头结点与头结点与头结点与头结点相邻的顶点相邻的顶点相邻的顶点相邻的顶点typedef struct headnodetypedef struct headnodeint node_index;int node_index;elemty
9、pe data;elemtype data;struct adj_node*next_adj;struct adj_node*next_adj;headnode;headnode;顶点号顶点号下一个与头结点相邻的下一个与头结点相邻的下一个与头结点相邻的下一个与头结点相邻的顶点的邻接结点顶点的邻接结点顶点的邻接结点顶点的邻接结点typedef struct adj_nodetypedef struct adj_nodeint node_index;int node_index;struct adj_node*next_adj;struct adj_node*next_adj;adj_node;a
10、dj_node;本讲稿第十一页,共五十页图的存储图的存储 邻接表邻接表uu图邻接表的定义图邻接表的定义typedef struct graph_ltypedef struct graph_lheadnode node_listMAXNUM;headnode node_listMAXNUM;int node_num;int node_num;graph_l;graph_l;231 data2data3data4data13412423本讲稿第十二页,共五十页图的存储图的存储 邻接表邻接表2143231 data2data3data4data1341242321431 data2data3data
11、4data134134注意:有向图与无向图的区别注意:有向图与无向图的区别注意:有向图与无向图的区别注意:有向图与无向图的区别本讲稿第十三页,共五十页图的存储图的存储n n图的邻接表存储法的特点图的邻接表存储法的特点uu优点优点节省存储空间节省存储空间边的插入和删除操作比较简便边的插入和删除操作比较简便uu缺点缺点结构复杂结构复杂vv具有两种不同的基本组成单元具有两种不同的基本组成单元本讲稿第十四页,共五十页图的存储图的存储n n3.边带权值的图的存储边带权值的图的存储uu1)在邻接矩阵中的实现)在邻接矩阵中的实现0 2 3 520 1 031 0 15 0 1 0a44=a44=a i j
12、a i j:记录边的权值;为:记录边的权值;为:记录边的权值;为:记录边的权值;为0 0表示无边表示无边表示无边表示无边12432 23 35 51 11 1本讲稿第十五页,共五十页图的存储图的存储n n3.边带权值的图的存储边带权值的图的存储uu2)在邻接表中的实现)在邻接表中的实现在邻接结点结构中增加一个权值域在邻接结点结构中增加一个权值域1 data2data3data4data233211354102331顶点号顶点号边权值边权值1 12 24 43 33 32 25 51 11 110103 3本讲稿第十六页,共五十页图的遍历图的遍历n3.6.3 图的遍历图的遍历n n问题:问题:u
13、u1)对于连通图,从一个顶点出发沿着所有可能)对于连通图,从一个顶点出发沿着所有可能的路径,是否可以将所有的顶点遍历到。的路径,是否可以将所有的顶点遍历到。uu2)图中有回路,遍历算法可能产生死循环。)图中有回路,遍历算法可能产生死循环。n n有重复的路径称为有重复的路径称为回路回路2143本讲稿第十七页,共五十页图的遍历图的遍历 深优深优n n1.深度优先遍历深度优先遍历uu(1)从一个未访问过的顶点开始,访问它的一个)从一个未访问过的顶点开始,访问它的一个未访问过的相邻顶点。未访问过的相邻顶点。uu(2)如果顶点的所有相邻顶点都是已访问过的,)如果顶点的所有相邻顶点都是已访问过的,则需要回
14、溯到之前的一个顶点,选取它的另一个则需要回溯到之前的一个顶点,选取它的另一个未被访问的相邻顶点。未被访问的相邻顶点。uu(3)对于前两个步骤是递归的)对于前两个步骤是递归的本讲稿第十八页,共五十页图的遍历图的遍历 深优深优n n1.深度优先遍历深度优先遍历uu(1)从一个未访问过的顶点开始,访问它的一个)从一个未访问过的顶点开始,访问它的一个未访问过的相邻顶点。未访问过的相邻顶点。uu(2)如果顶点的所有相邻顶点都是已访问过的,)如果顶点的所有相邻顶点都是已访问过的,则需要回溯到之前的一个顶点,选取它的另一个则需要回溯到之前的一个顶点,选取它的另一个未被访问的相邻顶点。未被访问的相邻顶点。uu
15、(3)对于前两个步骤是递归的)对于前两个步骤是递归的1258463717365284回到回到8173652841 3 6 8 4 2 5 7或者按以下顺序遍历:或者按以下顺序遍历:或者按以下顺序遍历:或者按以下顺序遍历:注意使用栈支持递归:注意使用栈支持递归:注意使用栈支持递归:注意使用栈支持递归:本讲稿第十九页,共五十页图的遍历图的遍历 深优深优n n深度优先遍历的特点深度优先遍历的特点uu“深度深度”:总是访问顶点的:总是访问顶点的一个一个相邻顶点,好像相邻顶点,好像是沿着图中的一条路径走到是沿着图中的一条路径走到“底底”,然后后退一,然后后退一点,再选一条路。如此点,再选一条路。如此“进
16、进退退进进退退”,直到所有,直到所有顶点都被访问顶点都被访问uu对于连通图,如果第一个被访问的顶点的所有相对于连通图,如果第一个被访问的顶点的所有相邻顶点都被访问了,意味着图中所有顶点都被访邻顶点都被访问了,意味着图中所有顶点都被访问了。问了。即栈空时即栈空时本讲稿第二十页,共五十页图的遍历图的遍历 深优深优n n用递归调用实现深度优先遍历算法用递归调用实现深度优先遍历算法void dfs void dfs(g g,v v)1 1访问顶点访问顶点访问顶点访问顶点v v;visit(v););visited v =1;p=gv-next_adjwhile(p!=NULL)w=p-node_ind
17、ex;if(visitedw=0)p=p-next_adj;2 2取得顶点的一个未被访问过的顶点取得顶点的一个未被访问过的顶点取得顶点的一个未被访问过的顶点取得顶点的一个未被访问过的顶点ww;3 dfs3 dfs(g g,ww);回到);回到);回到);回到2 2;4 4重复重复重复重复2 2,3 3直到该顶点所有的相邻顶点都被访问过;直到该顶点所有的相邻顶点都被访问过;直到该顶点所有的相邻顶点都被访问过;直到该顶点所有的相邻顶点都被访问过;dfs(g,w);本讲稿第二十一页,共五十页12345void dfs(g,v)visited v =1;p=g v-next_adj while(p!=
18、NULL)w=p-node_index;if(visited w =0)dfs(g,w);p=p-next_adj;void dfs(g,2)visited 2 =1;p=g 2-next_adj while(p!=NULL)w=p-node_index;if(visited 3 =0)dfs(g,3);p=p-next_adj;void dfs(g,3)visited 3 =1;p=g 3-next_adj while(p!=NULL)w=p-node_index;if(visited 4 =0)dfs(g,4);p=p-next_adj;void dfs(g,4)visited 4 =1;
19、p=g 4-next_adj while(p!=NULL)w=p-node_index;if(visited w =0)dfs(g,w);p=p-next_adj;void dfs(g,5)visited 5 =1;p=g 5-next_adj while(p!=NULL)w=p-node_index;if(visited w =0)dfs(g,w);p=p-next_adj;void dfs(g,1)visited 1 =1;p=g 1-next_adj while(p!=NULL)w=p-node_index;if(visited 2 =0)dfs(g,2);p=p-next_adj;if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 03 基本 数据结构 运算 精选 文档
限制150内