• 实践6.2


    Hash函数的实现(线性探测法,除留余数法)

    源程序:

    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    #define HASHSIZE 12
    #define NULLKEY -1
    struct HashTable
    {
    int *elem;
    int count;
    };

    //初始化哈希表
    int InitHashTable(HashTable &pHashTable)
    {
    pHashTable.count=0;
    pHashTable.elem=new int[HASHSIZE]; //分配整型数组
    for(int i=0;i<HASHSIZE;i++)
    pHashTable.elem[i]=-1;
    return 1;
    }

    //哈希函数
    int Hash(int key)
    {
    return key % HASHSIZE; //除留余数法
    }

    //插入关键字到哈希表
    int InsertHashTable(HashTable &pHashTable,int key)
    {
    int addr=Hash(key); //求哈希地址
    while(pHashTable.elem[addr]!=-1)
    addr=(addr+1)%HASHSIZE; //线性探测
    pHashTable.elem[addr]=key;
    pHashTable.count++;
    return 1;
    }


    //在哈希表中查找关键字
    int SearchHashTable(HashTable pHashTable,int key,int *address)
    {
    *address=Hash(key);
    while(pHashTable.elem[*address]!=key)
    {
    *address=(*address+1)%HASHSIZE; //线性探测
    if(pHashTable.elem[*address]==-1 || *address==Hash(key))
    return 0;
    }
    return 1;
    }

    int main()
    {
    int i;
    HashTable hashTable;
    InitHashTable(hashTable);
    int a[10]={4,5,6,4,8,14,10,23,12,16};
    for(i=0;i<10;i++)
    InsertHashTable(hashTable,a[i]); //插入这些值到hash表
    printf("哈希表中数的顺序为: ");
    for(i=0;i<HASHSIZE;i++)
    printf("%4d",hashTable.elem[i]);

    printf(" 请输入要查找的元素值: ");
    int number;
    scanf("%d",&number);
    int addr;
    if(!SearchHashTable(hashTable,number,&addr))
    {
    printf("这些数中没有你要查找的数! ");
    }
    else
    printf("这些数中有你要查的数,元素的位置为:%d ",addr);
    return 1;
    }

    运行结果:

  • 相关阅读:
    【Spring-MVC】
    【多线程】线程池关闭
    【DDD】基于事件驱动EDA -- 待完成
    【DDD】编码实战
    【Elastic Search】01- 原理
    【DDD】基于DDD的分层设计
    【DDD】Thoughtworks笔记(编码样例) -- 未完成
    【DDD】Thoughtworks笔记(目录划分、异常设计)
    平方和求余
    Factoring a Polynomial
  • 原文地址:https://www.cnblogs.com/duanqibo/p/13332837.html
Copyright © 2020-2023  润新知