C++中的线性探查法

#include "iostream.h"
const int m=13;
const int n=10;
int r[n+1];
class lnode
{
public:int j;
       int h(int k)           //构造散列函数
       {
           return k%13;
       }
       void creat(int ht[m],int n)
       {
           int i,j;
           int k;
           for(i=0;i<m;i++)        
               ht[i]=NULL;
           for(i=1;i<=n;i++)
           {
               k=r[i];               //r[i] 为一个关键字    
               j=h(k);               //j=h(k)为散列函数
               while(ht[j]!=NULL)
                   j=(j+1)%m;        //发生冲突时,查找空闲位置
               ht[j]=k;
           }
       }
       int find(int ht[m],int k)
       {
           int j=h(k);
           if(ht[j]==NULL)
               return -1;         //查找失败
           else if(ht[j]==k)
               return j;          //一次查找成功
           else
           {
               while((ht[j]!=k)&&(ht[j]!=NULL))
                   j=(j+1)%m;
               if(ht[j]==NULL)
                   return -1;      //多次查找失败
               else return j;      //多次查找成功
           }
       }

};
void main()
{
    int x,p,ht[m];
 int flag=0;
    lnode l;
    cout <<"输入"<<n<<"个关键字序列:";
    for(int y=1;y <=n;y++)
        cin>>r[y];                //输入关键字序列
    l.creat(ht,n);                //建立散列表
    cout <<"输入要查找的元素:";
    cin>>x;                        
    p=l.find(ht,x);
    cout<<"要查找的元素在"<<p<<"个位置";
 cout<<endl;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值