一. 定义和术语
查找表:为了便于查找而专门设置的一种数据结构,是由同一类型的用于查找的数据元素(记录)构成的集合
对查找表经常进行的操作:
1.查询某个特定的数据元素是否在查找表中
2.检索某个特定的数据元素的各种属性
3.在查找表中插入一个数据元素
4.从查找表中删除某个数据元素
静态查找表:仅做1,2操作的查找表
动态查找表:可做1,2,3,4操作的查找表
关键字:数据元素中某个数据项的值,用以标识一个数据元素
主关键字:可以唯一的标识一个记录的关键字
次关键字:能识别若干记录
查找:根据给定值,在查找表中确定一个其关键字等于给定值的数据元素或记录
查找成功:表中存在这样的记录,则给出该记录信息或指示该记录在表中的位置
查找表中不存在这一记录,则给出空记录或空指针
查找算法的性能分析:通常以关键字和给定值进行比较的记录个数的平均值为衡量算法好坏的依据
查找成功的平均查找长度(ASL):查找成功时为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值
查找不成功平均查找长度:确定查找不成功时和给定值进行比较的关键字个数的期望值称为在查找不成功时平均查找长度
平均查找长度:查找算法在查找成功时平均查找长度和查找不成功时平均查找长度之和
二. 查找使用的数据结构
在计算机中进行查找的方法与采用的数据结构有关
由于查找表中数据元素之间的关系是自由松散的“集合”关系,给查找操作带来不便,处理方法是在数据元素之间人为的加上约束关系。以便按某种规则查找。
添加的约束关系不宜过于复杂
可基本分为基于线性表的查找表,基于树的查找表和基于散列表的查找表
典型的关键字类型可以是任何可以进行比较的数据类型,如:
typedef float KeyType; //实型
typedef int KeyType; //整型
typedef char* KeyType; //字符串型
数据元素类型定义是:
typedef struct{
KeyType key; //关键字域
… //其他域
}ElemType;
对两个数值类型关键字进行比较的宏定义:
#define EQ(a,b) ((a)==(b))
#define LT(a,b) ((a)<(b))
#define LQ(a,b) ((a)<=(b))
对两个字符串类型的关键字进行比较的宏定义:
#define EQ(a,b) (!strcmp((a),(b))
#define LT(a,b) (strcmp((a),(b))<0)
#define LQ(a,b) (strcmp((a),(b))<=0)