学号: 20182315 《数据结构与面向对象程序设计》实验七报告
课程:《程序设计与数据结构》
班级: 1823
姓名: 邹家伟
学号:20182315
实验教师:王志强
实验日期:2019年10月28日
必修/选修: 必修
1.实验内容
定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301)
把测试代码放test包中补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)
编写Android程序对实现各种查找与排序算法进行测试
2. 实验过程及结果
- 通过回顾ppt,复习课本,完成实验一,总体难度不大。
实验2:因虚拟机已卸,开启idea的terminal选项,在里面运用命令行运行Java代码,此环节经网络搜索,要首先配置jdk环境变量,才可在在命令行中用javac运行。
实验3的难度整体不大,因老师已给出博客,难度只在于自行理解代码及实验原理,涉猎更多的排序方法。其原理大致相同,本质都是对二分法的各种告高阶改良。
实验四的难度可以说最大,需要对堆,二叉树整体综合理解学习,以及递归的整体学习,才可做完实验。。。
- 实验五也是对监听器的运用,对布局的应用。难度不大。
3. 实验过程中遇到的问题和解决过程
问题1:进行希尔排序时,对排序原理产生误解,导致排序失败。
- 问题1解决方案:第二轮循环排序时,一旦链上的节点产生变换,链上的每一个元素都要参与比较,如果符合对调位置条件,就要发生对调。而之前的理解是,如果符合对调条件,就将这两个数对调,忽略链上的其他值。
问题2:实验4中,对堆这种结构理解不清,堆的构造与树不同,其结点调换也比树灵活的多。
问题2解决方案:通过网络查找,理解了堆逻辑构图与理论构图的对应关系,可用数组辅助理解,通过数组下标的灵活运用,实现插入删除的操作。如图所示,每次排出一个最值节点,堆就少了一个需要排序的数,按此递归,直至堆只有一个节点
- 问题三:对递归算法理解应用不到位。
问题三解决方案:递归就是方法调用自己,在方法中设置return条件,在适当时跳出递归。递归的运用思路为:首先分析整体一小块,设置return条件,然后在在返回值里继续运算。
- 问题4:
在实验中经常会出现此类越界错误,在循环,递归中经常出现此类报错。 实验4解决方案:在出栈,查看栈顶,取下一位节点之前,应加上判断语句加以判断,如果实在因粗心大意无法避免,时候有针对的调试也可纠正错误。
其他(感悟、思考等)
在数据结构学习中,应深刻理解每种结构的构造特性。对于递归,栈,队列这种基础结构,更是复杂结构的基础。对于出栈入栈,出对入队的特性,要在堆,数学习中适当的加以运用。