哈希表基本操作

哈希表是不用通过比较数值的查找方法,相当便利,建立了数值与存储地址的联系,但是everything都不可能那么完美,它存在冲突,解决冲突的方法:线性探测、那个平方(就是1的平方,-1的平方,2的平方,-2的平方.....)还有一个随机数法,但我觉的前两种更靠谱,

上代码了!

 

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define NULLKEY -32768
int mod;
typedef struct 
{
    int *elem;
    int count;
 }Hashtable;
int InitHashtable(Hashtable *H,int m)      哈希表初始化
{
    H->elem=(int*)malloc(m*sizeof(int));
    for(int i=0;i<m;i++)
    H->elem[i]=NULLKEY;
    return 0;
}
int Hash(int e)
{
    return e%mod;
}
int InsertHash(Hashtable *H,int k)     插入哈希表
{
    int t=Hash(k);
    while(H->elem[t]!=NULLKEY)
    {
        t=(t+1)%mod;
        if(t==Hash(k))                                    已经探测一圈了,还是没有车位,无奈啊!
        {
            cout<<"哈希表已满!"<<endl; 
            return 0;
        }
        
    }
    H->elem[t]=k;
    return 0;
}
int SearchHash(Hashtable *H,int k)             搜索哈希表
{
    int t=Hash(k);
    while(H->elem[t]!=k)
    {
        t=(t+1)%mod;                          
        if(t==NULLKEY||t==Hash(k))            如果找到空的地方了,但是他不是k,说明哈希表原来没有此值;第二个是探测一圈了,未找到
        {
            cout<<"未找到!"<<endl; 
            return -1;
        }
    }
    return t; 
}
int main()
{
    Hashtable T;
    int i,j,m,n;
    cout<<"请输入你要插入哈希表元素的数目及mod:"<<endl; 
    cin>>m>>j;
    mod=j; 
    InitHashtable(&T,m);
    for(i=0;i<m;i++)
    {
        cin>>n;
        InsertHash(&T,n);
    }
    for(i=0;i<m;i++)
    cout<<T.elem[i]<<" ";
    cout<<endl;
    cout<<"输入你要查找的值:"<<endl;
    cin>>n;
    if(SearchHash(&T,n)!=-1)
    cout<<"他在哈希表第"<<SearchHash(&T,n)+1<<"个位置"<<endl;
    return 0;
    
}
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值