C语言之数据结构与算法_查找

一、实现折半查找

int BSL_FindKey(BSeqList* blist, int key)
//在排序的顺序表中查找关键码值为key的结点,返回结点的编号
//返回值大于等于0时表示找到值为key的结点的编号,-1表示没有找到
{
    /*请在BEGIN和END之间实现你的代码*/
    /*****BEGIN*****/
    int l=0,r = blist->len-1,mid = (l+r)/2;
    while(l<=r)
    {
        if(blist->pkey[mid]==key) return mid;
        else if(blist->pkey[mid]<key)
        {
            l = mid+1;
            mid = (l+r)/2;
        }
        else
        {
            r = mid-1;
            mid = (l+r)/2;
        }
    }
    return -1;
    /******END******/
    /*请不要修改[BEGIN,END]区域外的代码*/
}

二、实现散列查找

bool ILH_InsKey(LHTable* pt, int x)
//插入关键码x
//返回true,表示插入成功
//返回false,表示插入失败(关键码已经存在)
{
    /*请在BEGIN和END之间实现你的代码*/
    /*****BEGIN*****/
    if(ILH_FindKey(pt,x))
    {
        return false;
    }
    int n=pt->n;
    int k=x%n;
    HNode* p=&(pt->pn[k]);
    if(pt->pn[k].key==0)
    {
        pt->pn[k].key=x;
        return true;
    }
     while (p->next && p->key!=x)
     {
        p=p->next;
     }
    HNode* pnode=(HNode*)malloc(sizeof(HNode));
    pnode->key=x;
    pnode->next=NULL;
    p->next=pnode;
    return true;
    /******END******/
    /*请不要修改[BEGIN,END]区域外的代码*/
}
bool ILH_DelKey(LHTable* pt, int x)
//删除关键码
//返回true表示该关键码存在,且成功删除
//返回false表示该关键码不存在
{
    /*请在BEGIN和END之间实现你的代码*/
    /*****BEGIN*****/
    if(!ILH_FindKey(pt,x))
    {
        return false;
    }
    int n=pt->n;
    int k=x%n;
    HNode* p=pt->pn[k].next;
    HNode* q=&(pt->pn[k]);
    while(p->next)
    {
        if(p->key==x)
        {
            break;
        }
        p=p->next;
        q=p->next;
    }
 
    q->next=p->next;
    return true;
    /******END******/
    /*请不要修改[BEGIN,END]区域外的代码*/
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值