静态查找_Search】的更多相关文章

#include <stdio.h> #define MAXSIZE 50 #define OK 1 #define ERROR 0 int F[MAXSIZE];//斐波那契数列 int count; typedef int Status;//Stastu为函数返回的类型 /* a为数组, n为数组要查找的个数,key为要查找的关键字 */ Status Sequential_Search(int *a, int n, int key) {/* 无哨兵顺序查找, 查询n次a数组中是否与key…
一.简述 静态查找表又分为顺序表.有序表.静态树表和索引表.以下只是算法的简单实现及测试,不涉及性能分析. 二.头文件 /** author:zhaoyu date:2016-7-12 */ #include "6_3_part1_for_chapter9.h" typedef struct { int key; }SElemType; //静态查找表的顺序储存结构 #define ElemType SElemType #define KeyType int typedef struc…
查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找. 查找表:用于查找的数据集合称为查找表,一般有以下操作:①查找是否在表中:②查找属性:③进行操作. 查找表又分为: ①静态查找表:只可以进行之前的①②操作,例如顺序查找.折半查找: ②动态查找表:可以进行以上①②③所有操作,例如二叉排序树.二叉平衡树. 关键字:数据元素中某个可以唯一标识该元素的数据项. 平均查找长度(ASL):在查找的过程中,一次查找的长度是指需要比较的关键字次数,而平均查找长度则是所有查找过程中进行关键字的比较次数的…
{静态查找表 + 动态查找表} 所谓动态,就是,找的时候没有则添加,或者能删除 关键字:primary key:用来表示查找表中的一条记录 {主关键字 + 次关键字} 主关键字是唯一的,用来唯一的标识查找表中的一条记录 (一)静态查找表 一.顺序表 类似于数组,顺序存储,在表中有位置,查找即给定关键字,遍历这个表,找到其位置或给出整条记录: 可以设置“哨兵” ,即标记0号元素就是要找的关键字:这样可以减去每次判断是否查找结束的麻烦,平均时间几乎减少一半 优化: 若访问频度不同,则设置频度域,根据…
文字描算 之前分析顺序查找和折半查找的算法性能都是在“等概率”的前提下进行的,但是如果有序表中各记录的查找概率不等呢?换句话说,概率不等的情况下,描述查找过程的判定树为何类二叉树,其查找性能最佳? 如果只考虑查找成功的情况,则使查找性能达最佳的判定树是其带权内路径长度之和PH值取最小的二叉树. 其中n为二叉树上结点的个数(即有序表的长度):hi为第i个结点在二叉树上的层次数:结点的权wi=cpi(i=1,2,…,n),其中pi为结点的查找概率,c为某个常量.称PH值取最小的二叉树为静态最优查找树…
文字描述 以有序表表示静态查找表时,可用折半查找算法查找指定元素. 折半查找过程是以处于区间中间位置记录的关键字和给定值比较,若相等,则查找成功,若不等,则缩小范围,直至新的区间中间位置记录的关键字等于给定值或者查找区间的大小小于零时(表明查找不成功)为止. 示意图 算法分析 折半查找过程可以用一颗二叉判定树来表示,而具有n个结点的判定树的深度为[log2n]+1,所以折半查找法在查找成功和不成功时,与给定值进行比较的关键字个数都不会超过[log2n]+1. 现讨论折半查找算法的平均查找长度.…
文字描述 顺序查找的查找过程为:从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录:反之,若直至第一个记录,其关键字和给定值比较都不等,则表明表中没有所查记录,查找不成功. 示意图 略 算法分析 从顺序查找的过程看,Ci取决于所查记录在表中的位置.如:查找表中最后一个记录时,仅需比较一次,Ci为1:而查找表中第一个记录时,需比较n次,Ci为n.一般情况下Ci等于n-i+1. 假设每个记录的查找概率相等,且每次都能查找成功,则平…
静态查找 静态表是只执行查找操作,而不执行插入.删除等操作的表. 现在常说的有五大查找方法:顺序查找.分块查找.索引查找.树查找.哈希查找. 后两种之前写过了二叉查找树和哈希表,现在回顾前面三种,它们都属于顺序表查找. 1.顺序查找 思路最简单的查找,也就是遍历一遍看看有没有相等的元素. 可以设置一个哨兵,这样全都不相等也可以在哨兵那里返回,不必设边界条件. int find(T key){ data[] =key;//监视哨 //因为就算前面碰不到匹配的在0这里也会返回0,就不需要特别判断边界…
文字描述 分块查找又称为索引顺序查找,是顺序查找的一种改进方法.在此查找算法中,除表本身外, 还需要建立一个”索引表”.索引表中包括两项内容:关键字项(其值为该字表内的最大关键字)和指针项(指示该子表的第一个记录在表中位置).索引表按关键字有序,则表或者有序或者分块有序.所谓“分块有序”指的是第二个子表中所有记录的关键字均大于第一个子表中的最大关键字,第三个子表中的所有关键字均大于第二个子表中的最大关键字,,,,以此类推. 因此分块查找算法需分两步进行: 先确定待查记录所在的块(子表).由于索引…
顺序表的查找: 直接循环依次和目标比较就行 有序表的查找(二分查找): int search(SS *T,Type key){ int mid; ; int high=T.length; while(low<=high){ mid=(low+high)/; if(T.elem[mid]<key){ low=mid+; }else{ high=mid-; } } return high; } 二叉树表的查找:返回从上到下从左到右的序号(层序遍历,也可以用栈非递归遍历): int LevelSea…