《数据结构与面向对象程序设计》实验7 报告

学号 20182329 2019-2020-1 《数据结构与面向对象程序设计》实验7

报告

  • 课程:《程序设计与数据结构》
  • 班级: 1823
  • 姓名: 李一卓
  • 学号:20182329
  • 实验教师:王志强
  • 实验日期:2019年10月3日
  • 必修/选修: 必修

1.实验内容

  • 用链定义一串字符,学会链的构成和查找
  • 学习顺序查找、二分法查找、差值查找,被学会在链或者数组的情况下实现。
  • 学习斐波那契数列的查找方法,也是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率。
  • 学习二叉树的排序方法,并运用二叉树查找。
  • 编写二叉树以收纳一组数据,可以运用中序遍历、前序遍历、后序遍历来进行查找。
  • 简单学习二叉树方面的红黑数。
  • 学习分块查找、哈希查找在链表上的实现方法。

2. 实验过程及结果

  • 定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序)。

  • 重构代码,
    把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301)
    把测试代码放test包中,用IDEA的编辑器命令行编译运算。

  • 补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)
    测试实现的算法(正常,异常,边界)

  • 学习斐波那契数列的查找方法,也是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率。学习二叉树的排序方法,并运用二叉树查找。

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

  • 问题1:一开始我使用的是在类里面编写循环代码,来进行查找用while语句实现并判断,但是后来我发现自己的循环会一直走到链的最后一位,然后再弹出,根本不是我需要的查找数字。

  • 问题1解决方法:后来发现我的条件语句有很多问题,一一改正后,自己有重写了一个递归调用的方法,比之前的循环方法减少了很多代码量。

  • 问题2:在实验4调用sort包时,发现自己缺少一种方法,在sort中编写好后却发现自己不能调用。

  • 问题2解决方法:发现是自己的方法应该写在本身的类里。

其他(感悟、思考等)

在学习链的排序时,发现有很多方法可以用,不是非要冒泡法或选择排序发,哈希法取模循环排序也可以为数字排序,不过排序首先得查找,再决定用交换还是插入排序,当然最简单的线性排序交换也可以,快速排序的交换方法是最快的算法。在学习斐波那契查找时,相对于折半查找,一般将待比较的key值与第mid=(low+high)/2位置的元素比较,比较结果分三种情况:
  (1)相等,mid位置的元素即为所求
  (2)>,low=mid+1;
(3)<,high=mid-1。
斐波那契查找与折半查找很相似,他是根据斐波那契序列的特点对有序表进行分割的。他要求开始表中记录的个数为某个斐波那契数小1,及n=F(k)-1;

参考资料

posted @ 2019-11-17 09:59  李一卓  阅读(216)  评论(0编辑  收藏  举报