美文网首页
哈希表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语言实现

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