zoukankan      html  css  js  c++  java
  • 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;

    }

    运行结果:

  • 相关阅读:
    #Leetcode# 219. Contains Duplicate II
    #Leetcode# 203. Remove Linked List Elements
    #Leetcode# 141. Linked List Cycle
    #Leetcode# 128. Longest Consecutive Sequence
    linux——shell解释
    Linux——互联网搜索引擎nbtscan是一个扫描WINDOWS网络NetBIOS信息的小工具
    Linux——网络端口的状态netstat、ifconfig
    连不上网的原因
    jquery基础笔记
    网址收藏
  • 原文地址:https://www.cnblogs.com/duanqibo/p/11176525.html
Copyright © 2011-2022 走看看