Hash算法-查找

//

//  main.cpp

//  Hash

//

//  Created by duanqibo on 2019/7/12.

//  Copyright © 2019年 duanqibo. All rights reserved.

//  哈希函数,用于查找

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

//#define int DataType

#define HASHSIZE 12

#define NULLKEY -1

struct HashTable

{

    int *elem;

    int count;

};

//初始化哈希表

int InitHashTable(HashTable &pHashTable)

{

    pHashTable.count=0;

    pHashTable.elem=new int[HASHSIZE];//分配整型数组11个

    for(int i=0;i<HASHSIZE;i++)

        pHashTable.elem[i]=-1;  //全部元素初始化为-1

    return 1;

}

//哈希函数

int Hash(int key)

{

    return key % HASHSIZE;   //除留余数法

}

//插入关键字到哈希表

int InsertHashTable(HashTable &pHashTable,int key)

{

    int addr=Hash(key); //求hash地址

    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 argc, const char * argv[]) {

    // insert code here...

    HashTable hashTable;

    InitHashTable(hashTable);

    int a[10]={4,5,6,4,8,14,10,23,12,16};

    for(int i=0;i<10;i++)

        InsertHashTable(hashTable, a[i]);//将这些数插入到哈希表中  //将数组元素插入hash表

    printf("哈希表中数的顺序为: ");

    for(int 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;

}

运行结果:

原文地址:https://www.cnblogs.com/duanqibo/p/11176525.html