数据结构实验

查找

· 今天老师带着我们学习了"查找"这一章,查找分为基于线性表的查找法和基于树的查找法,但还只是讲了基于线性表的查找法,那么基于线性表的查找法还分为顺序查找法、折半查找法、分块查找法。

· 首先是顺序查找法,它的特点是用所给关键字与线性表中各元素的关键字逐个比较,直到成功或者失败,存储结构通常为顺序结构,也可以为链式结构。

· 顺序查找法的定义是:#define LIST_SIZE 20 typedf struct{KeyType key;OtherType other_data;}RecordType; typedef struct{RecordType r[LIST_SIZE+1]; int lenth;}RecordList;

· 这也是非常常规的顺序查找法的定义,但是今天所讲的重点是和"监视哨"有关,有了监视哨就可以大大提升查找的效率,还可以起到防止越界的作用。

· 折半查找法的核心思想还是非常好理解的,定义好low=1和high=l.lenth之后,mid=low+high / 2 ,首先判断mid是不是就是要找的那个数据,若相等,则直接返回值,若不是,则判断所求数据是比mid大还是比mid小,若比mid小,则high=mid-1,若比mid大,则low=mid+1,直接顺序查找法的O(n)提升为折半查找法的O(logn),若n足够大,性能也能得到质的飞越。

· 分块查找法的性能也是挺不错的,夹在顺序查找法与折半查找法之间,时间复杂度是O(nlogn),这里就不多做介绍。

谢谢浏览。

原文地址:https://www.cnblogs.com/ageng/p/13026755.html