美文网首页
哈希表C语言实现

哈希表C语言实现

作者: 林里icer | 来源:发表于2017-12-05 16:28 被阅读0次
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define true 1
#define false 0

typedef int elemtype;
typedef int status;

typedef struct HashNode{
    elemtype elem;
    struct HashNode *next;
}HashNode,*pNode;

//生成key
//公式:key = elem % 哈希表大小
int HashKey(elemtype elem){
    int key;
    key=elem%MAXSIZE;
    return key;
}

//创建哈希表
status CreateHash(pNode *hashmap,elemtype elem[],int size){
    int i=0;
    int key;
    for (i = 0; i < size; ++i)
    {
        //获得元素的key
        key=HashKey(elem[i]);
        //新建一个哈希表节点
        pNode temp = (pNode)malloc(sizeof(pNode));
        temp->elem=elem[i];
        //如果key对应的哈希表为空,则把节点加入哈希表之后;
        if(hashmap[key]==NULL){
            temp->next=hashmap[key];
            hashmap[key]=temp;
        }
        //如果不为空,直接赋值为新建的节点
        else{
            hashmap[key]=temp;
        }
    }
    return true;
}
//查找元素,并且输出元素
status FindHashElem(pNode *hashmap,elemtype elem){
    //获取元素的key
    int key=HashKey(elem);
    //获取哈希表中对应的key的节点
    pNode temp=hashmap[key];
    //当节点不为空的时候搜索
    while(temp!=NULL){
        //如果找到输出元素和他的key值
        if (temp->elem==elem)
        {
            printf("查找结果为:");
            printf("%d\n",temp->elem);
            printf("对应的key值为:");
            printf("%d",key);
            return true;
        }
        //如果不相等,指向下一个节点
        else{
            temp=temp->next;
        }
    }
    //没有搜索到这个元素
    printf("没有这个元素");
    return false;
}

int main(){
    int i,j;
    //数组
    elemtype num[100];
    //数组大小
    int size;
    pNode hashmap[MAXSIZE];
    //把哈希表全部赋值为空
    for (i = 0; i < MAXSIZE; ++i)
    {
        hashmap[i]=NULL;
    }
    printf("请输入数组大小:");
    scanf("%d",&size);
    for (j = 0; j < size; ++j)
    {
        printf("请输入数组元素:");
        scanf("%d",&num[j]);
    }
    //创建哈希表
    CreateHash(hashmap,num,size);
    //查找元素
    int findelem;
    printf("请输入要查找的元素:");
    scanf("%d",&findelem);
    FindHashElem(hashmap, findelem);
    return 0;
}


相关文章

  • 哈希表C语言实现

  • 探究Redis 04:哈希表与集合

    Redis哈希表(Hashes) Redis中的哈希表数据类型和很多编程语言的实现类似,通过键值对记录数据: 尽管...

  • Redis数据结构与对象——哈希

    1 字典的实现 Redis的字典使用哈希表作为底层实现,一个哈希表可以有多个哈希表节点,即每个哈希表节点就保存了字...

  • Hash表的简单理解

    哈希表概述: Objective-C 中的字典NSDictionary底层其实是一个哈希表,实际上绝大多数语言中字...

  • 4.字典

    字典 1. 字典的实现 Redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,每个哈希表节点...

  • 实操案例:字符串哈希表操作

    摘要:当遇到C语言库没有字符串哈希表的时候,该如何进行操作。 有考C语言可信编程认证的同事经常会问到,C语言库没有...

  • golang map的底层实现

    golang map的底层实现 粗略的讲,Go语言中map采用的是哈希查找表,由一个key通过哈希函数得到哈希值,...

  • Hash 表实现

    Hash 表、二叉树、链表是最常见的数据结构。 本文中用C++来实现一个简单的哈希表,帮助理解哈希表是怎样运作的。...

  • 15_哈希表(Hash Table)

    哈希表初识 哈希表,也叫做散列表 它是如何实现高效处理数据的?假设我们利用哈希表来实现映射,存储三对数据:put(...

  • 哈希表的实现原理 · Go 语言设计与实现

    原文链接:Go 语言设计与实现 3.3 哈希表 这一节会介绍 Go 语言中的另一个集合元素 — 哈希,也就是 Ma...

网友评论

      本文标题:哈希表C语言实现

      本文链接:https://www.haomeiwen.com/subject/dwucixtx.html