静态查找表,意思是针对这个表进行静态查找,何为静态,那就是不能动态修改表中内容,不能对表进行增加、删除。
静态查表表,有哪几种基本办法呢?
顺序查找法、折半查找法、分块查找法
顺序查找法,从队列头部逐个比对到末尾就可以了。存储数据可以使用数组或链表,数据通常没有非递增、非递减关系
折半查找:针对有严格大小顺序排列的序列,需要定两个变量一个指向存储空间的首部、一个指向尾部。然后用求平均的方式找到中间位置数,将这个数的大小与被查找数进行比较,通过大小来修改两个变量的指向。
例如:a[7] = {1,3,4,5,7,8,9 } 输入数字3试查找表内是否有3
变量 int low, high, mid; low = 0; high = 6; //分别指向有序序列两端, mid为存放平均值变量
(1)mid = (6 + 0) / 2 = 3; 将a[3]与3比较 a[3] = 5 ;大于3 所以high = 3 - 1 = 2;
(2) mid = (2 + 0) / 2 = 1 a[1] = 3与3相等,则找到要找的数,比较函数结束
分块查找
存储特点:一个有n个数据元素的数组或链表,将其分成几段(S0,S2,S3,S4 ... Sm-1),这里设为m段,这m段之间有大小关系,即S1中的元素 全小于或大于 S2中元素,以此类推。 另外需要一个索引表,存储每块的第一个元素位置和每块中的最大元素数值是多少。
当查找数字X时,先在索引表里查找,数字X会在哪一个块的数据范围中,如果Max(k - 1) < X < Max(k)(1 < k < m),则X在k块中,接下来就可以在k块中使用线性查找,如果存在返回成功,不存在则返回失败。