• 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;

    }

    运行结果:

  • 相关阅读:
    laravel 使用 php artisan make:model到指定目录(controller同理)
    Mysql常见的优化策略
    laravel路由别名
    laravel whereNotIn where子查詢
    phpstorm界面不停的indexing,不停的闪烁
    Linux下Redis开机自启(Centos6)
    数据结构常用算法
    困惑的前置操作与后置操作
    SSH框架整合中Hibernate实现Dao层常用结构
    过滤器与拦截器区别
  • 原文地址:https://www.cnblogs.com/duanqibo/p/11176525.html
Copyright © 2020-2023  润新知