20182315 实验7实验报告

学号: 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,复习课本,完成实验一,总体难度不大。20182315 实验7实验报告_第1张图片

20182315 实验7实验报告_第2张图片

  • 实验2:因虚拟机已卸,开启idea的terminal选项,在里面运用命令行运行Java代码,此环节经网络搜索,要首先配置jdk环境变量,才可在在命令行中用javac运行。

  • 实验3的难度整体不大,因老师已给出博客,难度只在于自行理解代码及实验原理,涉猎更多的排序方法。其原理大致相同,本质都是对二分法的各种告高阶改良。
    20182315 实验7实验报告_第3张图片

  • 实验四的难度可以说最大,需要对堆,二叉树整体综合理解学习,以及递归的整体学习,才可做完实验。。。20182315 实验7实验报告_第4张图片

20182315 实验7实验报告_第5张图片

20182315 实验7实验报告_第6张图片

  • 实验五也是对监听器的运用,对布局的应用。难度不大。

3. 实验过程中遇到的问题和解决过程

  • 问题1:进行希尔排序时,对排序原理产生误解,导致排序失败。
    20182315 实验7实验报告_第7张图片

  • 问题1解决方案:第二轮循环排序时,一旦链上的节点产生变换,链上的每一个元素都要参与比较,如果符合对调位置条件,就要发生对调。而之前的理解是,如果符合对调条件,就将这两个数对调,忽略链上的其他值。
  • 问题2:实验4中,对堆这种结构理解不清,堆的构造与树不同,其结点调换也比树灵活的多。
    20182315 实验7实验报告_第8张图片

  • 问题2解决方案:通过网络查找,理解了堆逻辑构图与理论构图的对应关系,可用数组辅助理解,通过数组下标的灵活运用,实现插入删除的操作。如图所示,每次排出一个最值节点,堆就少了一个需要排序的数,按此递归,直至堆只有一个节点

20182315 实验7实验报告_第9张图片

  • 问题三:对递归算法理解应用不到位。

20182315 实验7实验报告_第10张图片

  • 问题三解决方案:递归就是方法调用自己,在方法中设置return条件,在适当时跳出递归。递归的运用思路为:首先分析整体一小块,设置return条件,然后在在返回值里继续运算。

  • 问题4:20182315 实验7实验报告_第11张图片
    在实验中经常会出现此类越界错误,在循环,递归中经常出现此类报错。
  • 实验4解决方案:在出栈,查看栈顶,取下一位节点之前,应加上判断语句加以判断,如果实在因粗心大意无法避免,时候有针对的调试也可纠正错误。

其他(感悟、思考等)

在数据结构学习中,应深刻理解每种结构的构造特性。对于递归,栈,队列这种基础结构,更是复杂结构的基础。对于出栈入栈,出对入队的特性,要在堆,数学习中适当的加以运用。

参考资料

  • 递归概念

  • 堆排序

你可能感兴趣的:(20182315 实验7实验报告)