《数据结构打卡》第6天
1、明明什么都没有学懂,却还是感觉异常的累。
2、今天应该是看视频学习最长的一天了,但是一去做题(题目是昨天学的内容),发现整个人都废了,基本全忘。
今天把"查找"这章的视频过了一遍,题目没去做,学了什么东西还是让我回想一下吧,以下是查找这一章的考查范围。
1、顺序查找法。
查找表:是由同一类型的数据元素(或记录)构成的集合。
ASL:关键字的平均比较次数,也叫平均查找长度。
(1)顺序查找(线性查找)
应用范围:适用于顺序表或线性链表表示的静态查找表,表内元素可以无序分布。
typedef struct{ //定义一个顺序查找表
Elem Type *R //表基址
int Length //表长
}SSTable ST //定义顺序表ST
ST.R[i].key
ST是顺序表,R是数据元素,key是数据元素中第i个位置的值。
//顺序查找的算法如下
..........
(2)顺序查找算法分析:
查找第i个元素要比较_n-i+1_ 次,查找失败则比较__n+1_次。
查找成功时的平均查找长度。
ASL=(1+2+…+n)/n = (n+1)/2次
(3)顺序查找的特点:
优点:算法简单,逻辑次序无要求
缺点:平均查找长度太长(ASL),时间效率太低
2、折半查找法。
每次查找将待查记录所在区间缩小一半。
//折半查找的算法先留空吧,我估计后面的算法都不会考....但是也不一定。
(1)查找成功或查找失败的比较次数
(2)折半查找算法分析
平均查找次数log2(n+1)+1,平均查找长度 O(log2n)。
优点:查找效率比顺序查找要高
缺点:只适用于有序表,且限于顺序存储结构,(对线性链表无效)。
3、二叉排序树。
使用动态查找表。