zoukankan      html  css  js  c++  java
  • C语言数据结构基础学习笔记——静态查找表

    查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找。

    查找表:用于查找的数据集合称为查找表,一般有以下操作:①查找是否在表中;②查找属性;③进行操作。

    查找表又分为:

    ①静态查找表:只可以进行之前的①②操作,例如顺序查找、折半查找;

    ②动态查找表:可以进行以上①②③所有操作,例如二叉排序树、二叉平衡树。

    关键字:数据元素中某个可以唯一标识该元素的数据项。

    平均查找长度(ASL):在查找的过程中,一次查找的长度是指需要比较的关键字次数,而平均查找长度则是所有查找过程中进行关键字的比较次数的平均值。

    顺序查找:也叫线性查找

    可以从数组头部向后遍历:

    int Search1(int a[],int n,int key){
        for(int i=1;i<=n;i++){                        //注意从1开始 
            if(a[i]==key) return i;
        }
        return o;
    } 

    也可以从尾部向前遍历:

    int Search1(int a[],int n,int key){
        int i=n;
        a[0]=key;                                    //设置哨兵
        while(a[i]!=key){                            //如果不是要找的元素 
            i--;                                     //从后往前找 
        } 
        return i;                                    //如果查找失败也会返回0 
    }  

    折半查找:仅适用有序的线性表

    int Binary_Search(SeqList L,ElemType key,int n){       //L是一个有序顺序表,key是代查找的关键字,n是L的长度 
        int low=0,high=n-1,mid;                            //low,high,mid分别代表当前查找段的首位下标,末位下表和中间下标 
        while(low<=high){                                  //只要low与high不汇合,就表示查找表没有扫描完 
            mid=(low+high)/2;                              //中间下标为low和high之和除以2 
            if(L.elem[mid]==key) return mid;               //查找成功 
            else if(L.elem[mid]>key) high=mid-1;           //中间值比key大,向下查找 
            else low=mid+1;                                //中间值比key小,向上查找 
        }
        return -1;                                         //未能找到 
    } 

    分块查找:是折半查找与顺序查找的结合,将一个线性表分块,块中存储顺序任意,但要保证前一块的最大值小于后一块的最小值,同时,需要额外建立一个索引表来存储索引,每一个索引对应表中的每一块。

    分块查找的思想:

    ①确定带查找值在哪一块(折半查找);

    ②在确定的块中查找待查找值(顺序查找)。

    分块查找的定义:

    #define MaxSize 50
    typedef struct{
        int key;                        //这个索引块中最大关键字的值 
        int low,num;                    //存储索引块中第一个元素的下标和块的长度 
    }indexElem;                            //索引块结构 
    indexElem index[MaxSize];
  • 相关阅读:
    正则表达式
    python 模块和包
    python面向对象 : 反射和内置方法
    python面向对象 : 属性, 类方法, 静态方法
    python面向对象 : 抽象类(接口类),多态,封装(私有制封装)
    python面向对象 : 继承
    python面向对象:类空间,对象空间, 组合
    python: 面向对象:类和对象调用类中的变量和方法
    lamda匿名函数(与sorted(),filter(),map() 一起用), 递归函数, 二分查找
    python的各种库的用法
  • 原文地址:https://www.cnblogs.com/jackliu-timecomplexity/p/10630846.html
Copyright © 2011-2022 走看看