C++中的线性探查法

来源:互联网 发布:mac清除qq音乐缓存 编辑:程序博客网 时间:2024/06/12 01:15

#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;
}

原创粉丝点击