20182324 2019-2020-1 《数据结构与面向对象程序设计》实验9报告
课程:《程序设计与数据结构》
班级: 1823
姓名: 殷宇豪
学号: 20182324
实验教师:王志强
实验日期:2019年12月2日
必修/选修: 必修
1.实验内容
1.初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)
2.图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)
3.完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环
4.完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出
5.完成有向图的单源最短路径求解(迪杰斯特拉算法)
2. 实验过程及结果
(1)根据屏幕提示初始化无向图和有向图
(2)完成有向图和无向图的遍历
(3)图的拓扑排序
(4)无向图的最小生成树
(5)图的单源最短路径求解
3. 实验过程中遇到的问题和解决过程
- 问题1:对 Java 中 Iterator 的理解
- 问题1解决方案:
java.util.Iterator
在 JDK 帮助文档中这样阐述:public interface Iterator<E> 对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:- 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
- 方法名称得到了改进。
Iterator 分别有boolean hasNext()
、E next()
、void remove()
三个方法。
- 问题2:按照书上代码补充实现 LinkedBinaryTree,在 ArrayIterator 处报错。
问题2解决方案:可用 ArrayList 代替,ArrayList 类的已实现接口中包含 Iterable<E> 。
- 问题3:在查找二叉树时遇到 NullPointerException 空指针报错。
问题3解决方案:已定位到问题所在,但尚未解决。同学博客提出了一个解决方法:重新编辑驱动代码,确认调用无误值已初始化。该方法亟待验证。
其他(感悟、思考等)
二叉树是一种应用较为广泛的数据结构,它支持在多种不同的情况下进行选择。通过先序和中序遍历可确定一颗唯一的二叉树。对于数据结构与算法的处理,心里一定要先有一个大致的规划,否则在实际编写的过程中会相当盲目。