Hash(除留余数法+链地址法)

160 阅读1分钟
//哈希函数:除留余数法
//处理冲突:链地址法
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
const int N=10;

struct Node{
    int num;
    Node *next;
};
struct HashTable{
    Node *element[N];
    int countn;
};

HashTable *p;

void InsertHashTable(int key);
int Search(int key);

int main()
{
    int i,n;
    int a[N]={12,45,2,6,78,9,0,1,15,18};
    p=new HashTable();//这个先是初始化p这个头指针
    for(i=0;i<N;i++)
        p->element[i]=new Node();//这是初始化p下的每个element指针

    for(i=0;i<N;i++)
        InsertHashTable(a[i]);
    while(scanf("%d",&n)!=EOF)//可输入待查找元素
    {
        printf("%d\n",Search(n));
    }
    return 0;
}
void InsertHashTable(int key)
{
    Node *q;
    q=new Node();
    q->num=key;
    q->next=p->element[key%N]->next;
    p->element[key%N]->next=q;
}
int Search(int key)
{
    Node *q;
    q=new Node();
    q=p->element[key%N]->next;
    while(q!=NULL)
    {
        if(q->num==key)
            return key%N;
        q=q->next;
    }
    return -1;
}