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

    运行结果:

  • 相关阅读:
    学习的成本
    .Net Framework Client Profile 和 .Net Framework的区别[转]
    惆怅的开始
    Android Json解析
    android键盘的Done按钮
    百度地图SDK v2.1.2使用方法
    使用百度地图SDK 这是之前版本 现在的sdk v2-1-2使用方法完全改变
    svn
    Android 图片相关
    Android开发 开启闪光灯 关键代码
  • 原文地址:https://www.cnblogs.com/duanqibo/p/13332837.html
Copyright © 2011-2022 走看看