`

数据结构之查找的实现

阅读更多

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语言中,由于其对底层内存管理的灵活性,常被用来实现各种数据结构,包括静态查找表。 静态查找表的工作原理...

    3种查找算法——数据结构实验

    总结来说,掌握这些基本查找算法对于理解数据结构和算法的基础至关重要。在实际应用中,开发者需要根据数据的特性、查询需求以及性能要求来选择合适的查找算法,以优化程序性能。通过实验和实践,不仅可以深化理论...

    数据结构之查找

    ### 数据结构之查找 #### 一、基本概念 在数据结构中,“查找”是指在一个给定的数据集合中寻找特定元素的过程。查找操作是许多应用程序的基础,例如数据库管理系统、搜索引擎等。为了有效地执行查找操作,我们...

    数据结构_动态查找表

    动态查找表是数据结构中的一种重要实现,主要用于高效地进行数据查找、插入和删除等操作。在本主题中,我们将深入探讨动态查找表的概念、实现方式以及其在C语言中的应用。 动态查找表是一种灵活的数据结构,它允许...

    数据结构(查找)习题及答案

    数据结构中的查找技术是计算机科学中的重要概念,用于在数据集合中寻找特定元素。本题主要涉及了多种查找方法,包括顺序查找、折半查找、哈希查找以及B-树和二叉排序树的构建与操作。以下是这些知识点的详细说明: ...

    数据结构——查找

    数据结构中的查找是数据操作的重要组成部分,主要涉及在数据集合中寻找特定元素的过程。查找算法的性能直接影响到程序的效率,特别是在大规模数据处理时。本文将深入探讨几种常见的查找技术,包括顺序查找、二分查找...

    数据结构静态查找的实现

    这种数据结构的优势在于查找速度较快,因为数组的索引可以直接映射到内存地址,从而实现O(1)的时间复杂度查找。然而,它的缺点是容量固定,无法动态扩展。 在C语言中实现静态查找表,我们需要理解基本的数组操作和...

    数据结构 哈希查找

    总结起来,哈希查找是数据结构中的重要工具,它利用哈希函数和冲突解决策略实现了快速的数据查找。在C语言中实现哈希查找,需要考虑哈希表的结构、哈希函数的设计以及冲突处理方法。同时,结合适当的GUI库,我们可以...

    数据结构查找实验.doc

    数据结构查找实验是计算机科学中一个重要的实践环节,旨在加深学生对数据结构基本概念和实现方法的理解,同时训练他们在不同存储结构中实现各种运算的能力。实验主要包括以下几个关键知识点: 1. **顺序表**:顺序...

    《数据结构》 查找和排序 实验报告

    《数据结构》是一门深入研究数据组织和存储的学科,其中查找和排序是核心内容。实验报告的目标在于让学生深入理解并能实际应用这些概念。在本实验中,学生需要掌握以下知识点: 1. **查找算法**: - **顺序查找**...

    数据结构实现查找源代码

    数据结构在计算机科学中起着至关重要的作用,它们允许我们高效地存储和处理大量数据。在给定的文件中,提到了三种常见的查找算法:顺序查找、折半查找以及二叉排序树。这些方法都是在数组或树结构中寻找特定元素的...

    合工大数据结构查找实验

    合肥工业大学数据结构 查找实验 编写算法实现下列问题的求解。 (1) 对下列数据表,分别采用二分查找算法实现查找,给出查找过程依次所比较的元素,并以二分查找的判定树来解释。 (2) 设计出在二叉排序树中插入结点的...

    数据结构之二分法查找和散列查找实验

    在"数据结构实验4--查找"的压缩包中,很可能是包含了关于这两个查找算法的实验代码和说明文档。实验的目的是让你深入理解这两种查找方法的原理,并通过实践提高编程能力。你可以通过阅读和运行这些代码,观察它们...

    数据结构折半查找的实现

    这是我在网上下载的。经过自己的修改得到的。希望对大家有帮助啊

    数据结构实验——折半查找

    折半查找是数据结构中,查找的其中一种。此资源不但包括折半查找的算法,还包括帮助其运行的其他代码,可直接运行以实现折半查找。注:输入数据时,要将数据从大到小依次输入,方可实现折半查找。

    数据结构之查找算法分析

    数据结构中的查找算法是计算机科学中的重要组成部分,它涉及到如何高效地在大量数据中寻找特定信息。查找操作,也就是检索,通常在数据元素的集合,即查找表中进行。查找的效率与查找对象的组织方式和所采用的查找...

    c语言实现数据结构折半查找

    c语言实现数据结构折半查找

    数据结构课程设计 索引顺序查找

    另外,"数据结构课程设计报告.doc"和"索引顺序查找任务书.doc"文件可能包含了项目的详细描述、设计思路、算法分析、性能评估以及可能遇到的问题和解决方案。这些文档将帮助你深入理解索引顺序查找的原理和实现细节,...

Global site tag (gtag.js) - Google Analytics