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