算法---散列表

来源:互联网 发布:淘宝号信誉查询网址 编辑:程序博客网 时间:2024/06/10 08:44

如果能在关键字与记录保存的位置之间建立一种联系,则可以不经过比较,直接对关键字进行计算得出记录的位置,再到相应位置去读取数据即可。

将这种关键字与记录保存位置之间的对应关系称为散列函数,将这种方式建立的表称为散列表。


#include<stdio.h>


#define HASH_LEN 13
#define TABLE_LEN 8

int data[TABLE_LEN] = {69,65,90,37,92,6,28,54};
int hash[HASH_LEN] = {0};

void InsertHash(int hash[],int m,int data)
{
        int i;
        i = data % 13;
        while(hash[i])
                i = (++i) % m;

        hash[i] = data;
}

void CreateHash(int hash[],int m,int data[],int n)
{
        int i;
        for(i=0;i<n;i++)
                InsertHash(hash,m,data[i]);
}

int HashSearch(int hash[],int m,int key)
{
        int i;
        i = key % 13;
        while(hash[i] && hash[i] != key)
                i = (++i) % m;

        if(hash[i] == 0)
                return -1;
        else
                return i;
}

int main()
{
        int key,i,pos;
        CreateHash(hash,HASH_LEN,data,TABLE_LEN);
        printf("hash result:");
        for(i=0;i<HASH_LEN;i++)
        printf("%ld ",hash[i]);
        printf("\n");

        printf("enter key for search:");
        scanf("%d",&key);
        pos = HashSearch(hash,HASH_LEN,key);
        if(pos > 0)
                printf("search success location is %d \n",pos);
        else
                printf("search failed\n");
        return 0;
}
0 0
原创粉丝点击