数据结构复习(七)——查找

查找

1. 顺序查找
#define ElemType int 
typedef struct      //查找表的数据结构(顺序表)
{
    ElemType *elem; //动态数组基地址
    int TableLen;   //表的长度
}SSTable;

//顺序查找1
int Search_Seq(SSTable ST,ElemType key)
{
    int i;
    for(i=0;i<ST.TableLen && ST.elem[i]!=key;i++)
        ;
    //查找成功,则返回元素下标;查找失败则返回-1
    return i==ST.TableLen? -1:i;
}

//顺序查找2-"哨兵"
int Search_Seq(SSTable ST,ElemType key)
{
    ST.elem[0]=key; //"哨兵"
    int i;
    for(i=ST.TableLen;ST.elem[i]!=key;i--) ;  //从后往前找
    return i;   //查找成功,返回元素下标;查找失败,返回0
}

2. 折半查找
#define ElemType int 
typedef struct      //查找表的数据结构(顺序表)
{
    ElemType *elem; //动态数组基地址
    int TableLen;   //表的长度
}SSTable;

//折半查找,仅适用于有序的顺序表:默认升序排列
int Binary_Search(SSTable L,ElemType key)
{
    int low=0,high=L.TableLen-1,mid;
    while(low<=high)
    {
        mid=(low+high)/2;   //取中间位置
        if(L.elem[mid]==key)
            return mid;     //查找成功则返回mid所在位置
        else if(L.elem[mid]>key)
            high=mid-1;     //从前半部分继续查找
        else
            low=mid+1;      //从后半部分继续查找
    }
    return -1;  //查找失败,返回-1
}

3. 分块查找
//索引表
#define ElemType int
typedef struct {
    ElemType maxValue;
    int low,high;
}Index;

//顺序表存储实际元素
ElemType List[100];
....
...
..
.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wings(hha)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值