- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
查找表是由同一种类型的数据元素(或记录)构成的集合。集合中的数据元素之间存在着完全松散的关系。例如一张班级学生成绩表。
关键字是数据元素(或记录)中某个数据项的值,它可以标识一个或者多个数据元素。例如成绩表中的姓名。
主关键字是能够唯一确定一个数据元素(或记录)的关键字。例如成绩表中的学号。
查找就是根据给定的某个值,在一个查找表中确定一个相应数据元素(或记录)的运算,这个数据元素的关键字等于给定值。例如:查字典,查成绩。; 如果查找表中能够找到满足条件的记录,称为查找成功,否则称为查找不成功。
如果对查找表只进行查找操作,不改变表的结构,则称此类查找表为静态查找表(Static Search Table)SST;
如果在对查找表进行操作时,既可以进行查找操作,又可以进行插入、删除等操作,也就是说可以改变该查找表的结构,则称此类查找表为动态查找表(Dynamic Search Table)DST。
将查找过程中给定值和表中关键字比较的次数称为查找长度。通常用平均查找长度ASL来衡量查找算法的优劣。公式如下所示,其中n为查找表中记录的个数,Pi是查找第i个记录的概率,Ci是找到第i个记录所需比较的次数。; typedef int KeyType;
typedef struct{
KeyType key;
… … …
} ElemType;
typedef struct{
ElemType elem[MAXSIZE+1];
int length;
}SSTable;; 静态查找表中的查找算法主要有顺序查找、折半(二分)查找和分块(索引顺序)查找这几种。
9.1.2 顺序查找
顺序查找又称线性查找,它思路简单、容易实现,是一种最基本的查找方法。
其查找过程为:从查找表的一端开始,逐个进行关键字与查找值的比较,若某个记录的关键字值与给定值相等,则查找成功,给出数据元素在查找表中的位置;若将整个表查找完,仍未找到与给定值相同的关键字,则查找失败,给出提示信息。;【算法9.1】顺序查找
int Search_Seq(SSTable ST,KeyType x){
ST.elem[0].key=x; /*设置监护哨*/
i=ST.length;
while(ST.elem[i].key!=x)
i--; /*返回找到记录的下标或者0(查找不???功) */
return i;
}/*Search_Seq*/; 设查找表中各元素的查找概率相等,即 Pi=1/n,则上面的式子表示为:; 假设各记录的关键字是由小到大排序的,算法的实现过程为:在待查找的有序表中,将中间元素首先与给定值进行比较,若相等,则表示查找成功;若给定值小于中间元素的关键字,则在左边的区域中继续查找;若给定值大于中间元素的关键字,则在右边的区域中继续查找。重复上述过程,直到查找成功或者查找失败,查找的过程随之结束。;
;因x6,下一步继续在右半区查找。此时,low=2,high=2 ,mid=(2+2)/2=2。由于x=13,查找成功,所找到的记录序号为2。;第三次???????? low=11 high=13 mid=12
因x51,下一步继续在右半区查找,即:;【算法9.2】二分查找
int Search_Bin (SSTable ST,KeyType x)
{low=1;high=ST.length;
while(low=high) /* 区间条件判断 */
{ /* 当区间下限不高于上限时,进行比较测试 */
mid=(low+high)/2; /* 取中点 */
if(xST.elem[mid].key)
high=mid-1;/* 查找区间缩小到左边区域 */
else if(xST.elem[mid].key)
low=mid+1; /* 查找区间缩小到右边区域 */
else return mid;
}
return ERROR;
};算法分析:
对于有序查找表,可采用建立二叉树的方法来进行平均查找长度的分析:将表的中间元素作为二叉树的根结点,比中间值小的所有结点全部在二叉树的左子树中,比中间值大的所有结点全部在二叉树的右子树中。按照这种思路建立的二
您可能关注的文档
最近下载
- 新22J01 工程做法参考图集.docx VIP
- 2023~2024学年广东广州荔湾区广州市荔湾区真光实验学校初一上学期期中数学试卷(含答案).docx VIP
- 中药泡洗技术.pptx VIP
- 2025班干部班委竞选PPT模版(优质ppt).pptx VIP
- 好书推荐高尔基《童年》阅读指导经验分享PPT课件.pptx VIP
- 赶走小怪兽幼儿园中班韵律讲课PPT课件.ppt VIP
- 《CBT425-2011-低压粗油滤器》.pdf VIP
- 新22J06 楼梯 参考图集.docx VIP
- DB4401T 66-2020 地下管线探测技术规程.docx VIP
- 新22J11 轻质内隔墙参考.docx VIP
文档评论(0)