8.3.1 顺序查找
顺序查找思想:
从表的一端开始,逐个将记录关键字与给定的 值比较。若相等,则查找成功;若所有n 个记录的 关键字值都已比较,其关键字和给定值都不相等,则 查找失败。
若要在顺序表上进行查找,其类型定义:
typedef int KeyType; //关键字类型
typedef struct
r[0].key=k;
if (i>0) return i; return -1; }/*seq_search*/
/*监视哨*/
/*查找成功*/
while (r[i]. key!=k) i--; /*元素比较*/ /*查找失败*/
算法效率分析:
(2)在平均情况下,假定各记录的查找机会均等, 即pi=1/n ,由于找第i个记录需要比较(n-i+1)次,
{ KeyType key; // other fields; //关键字 //其它数据项
} SSTable[MAXSIZE]
算法描述如下:
int Seq_Search(SSTable r,int n,KeyType k) {/*返回关键字等于k的元素在顺序表表r中的位置, n为表中元素的个数*/ int i; i=n;
二、散列函数的构造方法 1、除留余数法是最为简单常用的一种方法,它是以表长m来除关键字,取余数 作为散列地址,即 h(key) = key%m。该方法的关键就是选取m。m一般取为略大 于元素个数的第一个素数。
2、举例:如果给出一组数据(20,30,70,14,8,12,18,60,1,11),因为 一共10个数据,那么m应该选取为略大于10的素数11, 散列函数h(key) = key%11。
0 11