20182335 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结

教材学习内容总结

19.0 概述

  • 本章是在讲图及它的特殊用途
  • 讨论有向图和无向图

19.1 无向图

  • 无向图中,表示边的顶点对是无序的
  • 如果图中的两个顶点之间有边连接,则称它们是邻接的
  • 路径是图中连接两个顶点的边的序列
  • 第一个顶点和最后一个顶点相同且边不重复的路径称为环

19.2 有向图

  • 在有向图中,边是顶点的有序对
  • 有向图中的路径是连接图中两个顶点的有向边的序列

19.3 带权图

  • 图的每条边上都有对应的权值的图称为带权图

19.4.1 遍历

  • 图的遍历一般有两种:类似树的层序遍历的广度优先遍历;类似树的先序遍历的深度优先遍历
  • 利用队列管理遍历过程,用迭代器得到结果

19.4.2 测试连通性

  • 如果图中任意两个顶点间都有路径相连,则为连通图。这个定义对无向图和有向图都成立
  • 当且仅当从任意顶点开始的广度优先遍历中得到的顶点数等于图中所含有的顶点数时,图是连通的。
    --

19.4.3 最小生成树

  • 生成树是包含图中所有顶点及图中部分(可能不是全部)边的一棵树
  • 最小生成树是其所含边的权值之和小于等于图的任意其他生成树的边的权值之和的生成树

19.5.1 邻接表

  • 邻接列表是一种特殊的链表,它有点像解决哈希排序地址冲突时用的中的链地址法。对于无向图而言,一条边会同时出现在边两边的两个顶点的邻接列表中。对于加权图而言,每条边还会存储一个值代表该边的权重。

19.5.2邻接矩阵

  • 邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而言,该图的邻接矩阵有n行n列,每一个点代表了两个顶点之间的一条边。对于无向图,如果A1和A2之间有一条边,那么在二维矩阵中,[A1,A2]和[A2,A1]处的值为1。对于有向图,如果A1和A2之间有且仅有一条A1指向A2的边,那么[A1,A2]处的值为1,[A2,A1]处的值为0。对于加权图,把相应位置的1换成权值即可。

教材学习中的问题和解决过程

问题1:图要如何通过代码来进行实现呢?

问题1解决方案:

根据课本P423页的内容,目前实现图的代码方式是通过邻接表、邻接矩阵的方式。这两种方式(尤其是邻接矩阵)就是二维数组,而我们在C语言当中已经接触过二维数组。在这里,二维数组的每个位置表示图中两个顶点的交叉点,并且通过一个布尔型变量来判断两个顶点是否邻接。顶点和顶点之间的连线(边)的实现方式承袭的是用数组实现树的方式。

代码调试中的问题和解决过程

问题1:书本上的代码没有集合成为一个类,都是分散的,直接放在一起也会报错。

问题1解决方案:
课本上给出的只是其中的几个关键方法,而并不是完整的类。而且考虑到使用泛类的情况,我们可以不用直接使用课本上的代码,而是根据课本上

代码托管(https://gitee.com/li_jinquan/ljq/tree/master/Chart19)

上周考试错题总结

点评过的同学博客和代码

本周结对学习情况
20182311

感悟

本周事情比较多,学习时间不足,需要及时调整,花更多时间和精力去调整。下周开始要刻意训练自己的动手能力,多敲代码多看书。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 1000/1500 2/4 18/38
第五周 1500/2000 3/7 22/60
第六周 2335/3000 2/4 28/40
第七周 3050/4000 2/4 18/40
第八周 4223/5000 2/4 18/36
第9周 5330/5000 2/4 30/60
第10周 6700/5000 2/4 30/60

参考资料

《Java程序设计与数据结构教程(第二版)》

《Java程序设计与数据结构教程(第二版)》学习指导

posted @ 2019-11-30 17:56  李金泉  阅读(163)  评论(0编辑  收藏  举报