当前位置:   article > 正文

【数据结构】哈希表的创建、查找(C语言实现)_再编写一个函数,实现哈希表的造表和查找操作。

再编写一个函数,实现哈希表的造表和查找操作。

程序代码:

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

#define ElemType int

#define HASHSIZE 11

#define NUM 9

#define NULLKEY -54321

typedef struct {

    ElemType elem[HASHSIZE];

    int count;

}HashTable;

void InitHashTble(HashTable* H) {

    H->count = HASHSIZE;

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

         H->elem[i] = NULLKEY;

    }

}

int HashFunction(ElemType key, int p) {

    return(key % p);

}

void InsertHashTable(HashTable* H, ElemType key)

{

    int address;

    address = HashFunction(key, HASHSIZE);

    while (H->elem[address] != NULLKEY)

    {

         address = HashFunction((address + 1), HASHSIZE);

    }

    H->elem[address] = key;

}

int SearchHashTable(HashTable* H, int key) {

    int address;

    address = HashFunction(key, HASHSIZE);

    if (H->elem[address] == NULLKEY) { return -1; }

    else {

         while (H->elem[address] != key) {

             address = HashFunction(address + 1, HASHSIZE);

             if (H->elem[address] == NULLKEY) { return -1; }

         }

         return address;

    }

}

int main() {

    HashTable* H=(HashTable*)malloc(sizeof(HashTable));

    InitHashTble(H);

    int key;

    printf("请依次输入需要存储的%d个整数\n", NUM);

    for (int i = 0; i < NUM; i++) {

         printf("第%d个整数为:\n", i + 1);

         scanf("%d", &key);

         InsertHashTable(H, key);

    }

    printf("\n请输入你要查找的整数:\n");

    scanf("%d", &key);

    int t = SearchHashTable(H, key);

    if (t == -1) { printf("查找失败!不存在该整数\n"); }

    else { printf("该整数存储在第%d个位置\n", t); }

    return 0;

}

运行截图:

 

实验小结

本次的实验要求弄清楚最关键的两个模块,即插入和查找,首先要有哈希函数生成映射地址、有哈希表保存元素,然后要有自己设定的解决冲突的办法,这个程序是采用向下挪动一个办法,直到找到为空的地方保存。在查找中也是,先要通过哈希函数生成映射地址,通过这个地址参看哈希表中时候有元素,考虑到会有冲突的产生,那么必须要通过循环查找,要么找到元素,要么直到为空跳出查找。这也是这个程序的难点所在。总体来说,哈希表对于提高储存和查找效率方面有很大的提升。实验难度不是很大。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/500058
推荐阅读
相关标签
  

闽ICP备14008679号