20182320《程序设计与数据结构》第十周学习总结
20182320《程序设计与数据结构》第十周学习总结
教材学习内容总结
1.图的概念
关于图的概念,老师在课堂上已经较为详细地说明过了,因此不再赘述。
重要的概念有:无向图、有向图、顶点、边……
2.图的遍历
2.1 广度优先遍历
2.1.1 概念
与树的层序遍历相似,按照路径长度由小到大的顺序,优先遍历属于同一层的顶点。
2.1.2 实现思路
运用迭代器、队列。
首先把开始顶点入队列,标记其为已访问,然后开始如下循环:
从队列中取一个顶点,将其添加到迭代器中,然后将这个顶点的所有未访问的邻接顶点入队列,同时将这些顶点标记为已访问,直到队列为空。
2.2 深度优先遍历
2.2.1 概念
类似于树中的先序遍历,从开始顶点开始,一条路走到黑,一直往下访问顶点,直到没有下一个顶点可以访问。
2.2.2 实现思路
和广度优先遍历类似,只需要把队列结构换成栈就行了。
2.3 图的建立
2.3.1 邻接表
邻接表是一种数组和链表结合的存储图的方法,和我们之前实现的哈希排序之链地址法有点相似。
2.3.2 邻接矩阵
邻接矩阵可用于表示有向图或无向图的连接情况,横纵坐标表示连接的两个结点,矩阵内可存入0,1或true,false来表示两节点是否有连接。在表示无向图连接的时候,矩阵是对称的。
教材学习中的问题和解决过程
问题1:
在学习的时候感觉使用数组实现图的建立有很多模糊的地方,比如,邻接矩阵在存储无向图的时候是只用右上三角还是使用整个矩阵?
问题1解决方案:
充分了解每个部分的功能。
代码调试中的问题和解决过程
问题1:
一开始想用链表结构来实现PP19_1,但是最后发现在未知某个节点与多少个其他节点有连接的时候,确定下一个连接比较麻烦。
问题1解决方案:
采用多个数组来实现图会更加方便。
问题2:
在根据书上代码进行实现的时候,发现我的IDEA的ArrayIterator和书上的不太一样,需要加入参数才能使用。
问题2解决方案:
把ArrayIterator替换成ArrayList,有同样的功能。
问题3:
程序报错
问题3解决方案:
查找CSDN
使用第二条方法。
代码托管
上周考试错题总结
上周无考试。
结对及互评
点评过的同学博客和代码
其他(感悟、思考等,可选)
这周所学习的图与上周学习的树有很大关联,树本质上就是图,但是它们在构建和实现遍历的方面有有着些许不同。这周我理解的较为透彻的,能自己用代码实现的知识是图的深度和广度遍历,它们都很好地运用了我们之前学习的队列结构和栈结构。然而图在涉及权值和有向的情况下,构建情况就会变得更加复杂,我还需要进行深入学习。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 10000行 | 30篇 | 400小时 | |
第一周 | 208/208 | 2/2 | 9/9 | |
第二周 | 258/466 | 2/4 | 15/24 | |
第三周 | 693/1159 | 2/6 | 22/46 | |
第四周 | 1383/2542 | 2/8 | 30/76 | |
第五周 | 1300/3842 | 2/10 | 22/98 | |
第六周 | 1998/5840 | 2/12 | 24/122 | |
第七周 | 2901/8741 | 2/14 | 30/152 | |
第八周 | 3556/12297 | 2/16 | 30/182 | |
第九周 | 12297/13394 | 3/19 | 32/214 |