1、顺序查找
#define MAXL 100
typedef int KeyType;
typedef char InfoType[10];
typedef struct {
KeyType key;
InfoType data;
}NodeType;
typedef NodeType SeqList[MAXL];
int SeqSearch(SeqList R,int n,KeyType k){
int i=0;
while(i<n&&R[i].key!=k){
printf("%d",R[i].key);
i++;
}
if(i>=n){
return -1;
}else{
printf("%d",R[i].key);
return i;
}
}
2、折半查找
int BinSearch(SeqList R,int n,KeyType k){
int low=0,high=n-1,mid,count=0;
while (low<=high) {
mid=(low+high)/2;
printf("%d:在[%d,%d]中查找到元素R[%d]:,%d\n",++count,low,high,mid,R[mid].key);
if(R[mid].key==k){
return mid;
}
if(R[mid].key>k){
high=mid-1;
}else{
low=mid+1;
}
}
return -1;
}
3、分块查找
typedef struct {
KeyType key;
int link;
}IdxType;
typedef IdxType IDX[MAXL];
int IdxSearch(IDX I,int m,SeqList R,int n,KeyType k){
int low=0,high=m-1,mid,i,count1=0,count2=0;
int b=n/m;
printf("二分查找\n");
while(low<=high){
mid=(low+high)/2;
printf("第%d次查找: 在[%d,%d]中查找到元素R[%d]: %d\n",count1+1,low,high,mid,R[mid].key);
if(I[mid].key>=k){
high=mid-1;
}else{
low=mid+1;
}
count1++;
}
if(low<m){
printf("比较%d次,在第%d块中查找元素 %d\n",count1,low,k);
i=I[low].link;
printf("顺序查找 :\n");
while(i<I[low].link+b-1&&R[i].key!=k){
i++;
count2++;
printf("%d ",R[i].key);
}
printf("\n");
printf("比较%d次,在顺序表中查找元素%d\n",count2,k);
if(i<=I[low].link+b-1){
return i;
}else{
return -1;
}
}
return -1;
}
//测试代码
int main (int argc, const char * argv[])
{
SeqList R;
KeyType k=46;
IDX I;
int a[]={8,14,6,9,10,22,34,18,19,31,
40,38,54,66,46,71,78,68,80,85,100,94,88,96,87},i;
for(i=0;i<25;i++){
R[i].key=a[i];
}
I[0].key=14;I[0].link=0;
I[1].key=34;I[1].link=4;
I[2].key=66;I[2].link=10;
I[3].key=85;I[3].link=15;
I[4].key=100;I[4].link=20;
printf("\n");
if((i=IdxSearch(I,5,R,25,k))!=-1){
printf("元素 %d的位置是%d\n",k,i);
}else{
printf("元素%d不在表中\n",k);
}
printf("\n");
return 0;
}
分享到:
相关推荐
数据结构中的查找是计算机科学中一个基础且重要的概念...通过本次实验,学生不仅能熟练掌握这两种查找算法的实现,还能了解它们在实际应用中的选择和优化策略,这对于提升编程能力及理解数据结构的重要性具有重要意义。
动态查找表是数据结构中的一个重要概念,主要用于高效地进行数据的插入、删除和查找操作。在计算机科学中,数据结构的选择直接影响到算法的效率和程序的性能。动态查找表是一种可以随数据变化而动态调整其结构的表,...
静态查找表主要依赖于数组或链表来实现,因为这两种数据结构都可以提供直接访问任意位置元素的能力。在C语言中,由于其对底层内存管理的灵活性,常被用来实现各种数据结构,包括静态查找表。 静态查找表的工作原理...
总结来说,掌握这些基本查找算法对于理解数据结构和算法的基础至关重要。在实际应用中,开发者需要根据数据的特性、查询需求以及性能要求来选择合适的查找算法,以优化程序性能。通过实验和实践,不仅可以深化理论...
### 数据结构之查找 #### 一、基本概念 在数据结构中,“查找”是指在一个给定的数据集合中寻找特定元素的过程。查找操作是许多应用程序的基础,例如数据库管理系统、搜索引擎等。为了有效地执行查找操作,我们...
动态查找表是数据结构中的一种重要实现,主要用于高效地进行数据查找、插入和删除等操作。在本主题中,我们将深入探讨动态查找表的概念、实现方式以及其在C语言中的应用。 动态查找表是一种灵活的数据结构,它允许...
数据结构中的查找技术是计算机科学中的重要概念,用于在数据集合中寻找特定元素。本题主要涉及了多种查找方法,包括顺序查找、折半查找、哈希查找以及B-树和二叉排序树的构建与操作。以下是这些知识点的详细说明: ...
数据结构中的查找是数据操作的重要组成部分,主要涉及在数据集合中寻找特定元素的过程。查找算法的性能直接影响到程序的效率,特别是在大规模数据处理时。本文将深入探讨几种常见的查找技术,包括顺序查找、二分查找...
这种数据结构的优势在于查找速度较快,因为数组的索引可以直接映射到内存地址,从而实现O(1)的时间复杂度查找。然而,它的缺点是容量固定,无法动态扩展。 在C语言中实现静态查找表,我们需要理解基本的数组操作和...
总结起来,哈希查找是数据结构中的重要工具,它利用哈希函数和冲突解决策略实现了快速的数据查找。在C语言中实现哈希查找,需要考虑哈希表的结构、哈希函数的设计以及冲突处理方法。同时,结合适当的GUI库,我们可以...
数据结构查找实验是计算机科学中一个重要的实践环节,旨在加深学生对数据结构基本概念和实现方法的理解,同时训练他们在不同存储结构中实现各种运算的能力。实验主要包括以下几个关键知识点: 1. **顺序表**:顺序...
《数据结构》是一门深入研究数据组织和存储的学科,其中查找和排序是核心内容。实验报告的目标在于让学生深入理解并能实际应用这些概念。在本实验中,学生需要掌握以下知识点: 1. **查找算法**: - **顺序查找**...
数据结构在计算机科学中起着至关重要的作用,它们允许我们高效地存储和处理大量数据。在给定的文件中,提到了三种常见的查找算法:顺序查找、折半查找以及二叉排序树。这些方法都是在数组或树结构中寻找特定元素的...
合肥工业大学数据结构 查找实验 编写算法实现下列问题的求解。 (1) 对下列数据表,分别采用二分查找算法实现查找,给出查找过程依次所比较的元素,并以二分查找的判定树来解释。 (2) 设计出在二叉排序树中插入结点的...
在"数据结构实验4--查找"的压缩包中,很可能是包含了关于这两个查找算法的实验代码和说明文档。实验的目的是让你深入理解这两种查找方法的原理,并通过实践提高编程能力。你可以通过阅读和运行这些代码,观察它们...
这是我在网上下载的。经过自己的修改得到的。希望对大家有帮助啊
折半查找是数据结构中,查找的其中一种。此资源不但包括折半查找的算法,还包括帮助其运行的其他代码,可直接运行以实现折半查找。注:输入数据时,要将数据从大到小依次输入,方可实现折半查找。
数据结构中的查找算法是计算机科学中的重要组成部分,它涉及到如何高效地在大量数据中寻找特定信息。查找操作,也就是检索,通常在数据元素的集合,即查找表中进行。查找的效率与查找对象的组织方式和所采用的查找...
c语言实现数据结构折半查找
另外,"数据结构课程设计报告.doc"和"索引顺序查找任务书.doc"文件可能包含了项目的详细描述、设计思路、算法分析、性能评估以及可能遇到的问题和解决方案。这些文档将帮助你深入理解索引顺序查找的原理和实现细节,...