首页 > 其他分享 >数据结构-哈希表-007

数据结构-哈希表-007

时间:2024-03-26 12:59:47浏览次数:23  
标签:NODE hash pnode 007 哈希 HASH 数据结构 data

1哈希表-通讯录

1.1哈希结点结构体定义

/*=====自定义数据类型=====*/
typedef struct person_information
{
    char name[32];
    char sex;
    int age;
    char tel[32];
    char addr[64];
}DATA_TYPE;
/*=====定义一个哈希数据结点=====*/
typedef struct hash_node
{
    DATA_TYPE data;//哈希结点数据域
    struct hash_node *pnext;//哈希结点指针域
}HASH_NODE;

1.2哈希函数

/*==========哈希函数==========*/
int hash_fun(char ch)
{
    return ch-'a';
}

1.3创建一个哈希表结点

/*==========创建一个哈希表结点==========*/
HASH_NODE* create_hash_table_node(DATA_TYPE data)
{
    HASH_NODE *pnode=NULL;

    /*创建一个哈希表结点空间*/
    pnode=malloc(sizeof(HASH_NODE));
    if(NULL==pnode)
    {
        perror("fail to malloc");
        return NULL;
    }

    /*哈希表结点初始化*/
    pnode->data=data;
    pnode->pnext=NULL;

    return pnode;
}

1.4哈希表插入

/*==========哈希表插入==========*/
int insert_hash_table(HASH_NODE *pnode,DATA_TYPE data)
{
    int addr=0;

    addr=hash_fun(data.name[0]);

    pnode->pnext=hash_table_head[addr];
    hash_table_head[addr]=pnode;

    return 0;
}

1.5哈希表遍历

/*==========哈希表遍历==========*/
void hash_for_each(void (*pfun)(HASH_NODE *))
{
    HASH_NODE *ptmp=NULL;
    int i=0;

    for(i=0;i<HASH_SIZE;i++)
    {
        ptmp=hash_table_head[i];
        while(1)
        {
            if(ptmp==NULL)
            {
                break;
            }

            pfun(ptmp);
            ptmp=ptmp->pnext;
        }
    }
}

/*==========遍历方式==========*/
void show_data(HASH_NODE *pnode)
{
    printf("%-10s\t%-10c\t%-10d\t%-10s\t%-20s\n",pnode->data.name,pnode->data.sex,pnode->data.age,pnode->data.tel,pnode->data.addr);
}

运行结果:
在这里插入图片描述

标签:NODE,hash,pnode,007,哈希,HASH,数据结构,data
From: https://blog.csdn.net/qq_63713157/article/details/137015947

相关文章

  • 数据结构——二叉搜索树详解
    一、二叉搜索树定义二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:1.非空左子树上所有节点的值都小于根节点的值。2.非空右子树上所有节点的值都大于根节点的值。3.左右子树也都为二叉搜索树。如下图所示:二、二叉搜索树的操作二叉搜索树结构:t......
  • Python数据结构实验 递归算法设计
    一、实验目的1.掌握递归程序设计的基本原理和方法;2.熟悉数据结构中顺序表和单链表下的递归算法设计思想;3.掌握并灵活运用递归算法解决一些较复杂的应用问题。二、实验环境1.Windows操作系统的计算机2.Python3.7环境平台和PyCharm编辑器三、实验说明 1.实现递归算法的程序......
  • HashMap---数据结构
    目录一、基本数据结构二、树化与退化三、索引计算四、put方法和扩容五、并发问题六、key的设计一、基本数据结构        在jdk1.7版本的时候,hashmap结构主要是使用数组+链表的格式,而在jdk1.8版本中,hashmap的数据结构增加了一种“红黑树”的结构,即数组+(......
  • 代码随想录第六天: 哈希表(数组+HashSet+HashMap)
    语言:Java参考资料:代码随想录、ChatGPT3.5当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。如果在做面试题目的时候遇到需要判断一个......
  • 蓝桥杯算法集训 - Week 4:BFS、并查集、Flood Fill、哈希、单调栈/队列
    蓝桥杯算法集训-Week4本系列随笔用于整理AcWing题单——《蓝桥杯集训·每日一题2024》的系列题型及其对应的算法模板。一、BFSBFS算法复习参考:BFS(Java)广度优先搜索简单介绍、模板、案例(一)Ⅰ、代码模板staticvoidbfs(Troot){//双端队列,用来存储元素D......
  • 速通数据结构第三站 单链表
    系列文章目录速通数据结构与算法系列1  速通数据结构与算法第一站复杂度          http://t.csdnimg.cn/sxEGF2  速通数据结构与算法第二站顺序表 3 速通数据结构与算法第二站单链表 感谢佬们支持!目录系列文章目录前言一、单链表   ......
  • 北林oj数据结构259
    字符串的插入描述编写算法,实现下面函数的功能。函数voidinsert(char*s,char*t,intpos)将字符串t插入到字符串s中,插入位置为pos(插在第pos个字符前)。假设分配给字符串s的空间足够让字符串t插入。(说明:不得使用任何库函数)输入多组数据,每组数据有三行,第一行为插入的位置pos......
  • 06天【代码随想录算法训练营34期】 第三章 哈希表part01(● 242.有效的字母异位词 ●
    242.有效的字母异位词思路:26位的array,每个分别对应a,b,c...,z,如果遇到一个字母就++,如果两个array一样则为anagramhint:toinitiateanarraywithnelementscarryingvalue0:arr=[]arr=[0foriinrange(n)]print(arr)classSolution:defisAnagram(self,......
  • P5007 DDOSvoid 的疑惑
    原题链接题解1.具体去考虑每个集合所包含的元素及其大小个数是非常繁琐的,所以我们考虑每个元素对答案的贡献2.令\(f[now]\)代表以\(now\)为根节点的答案\(sizes[now]\)代表以\(now\)为根节点所包含集合的个数更新过程如下:\(f[now]+=f[next]*(sizes[now]+1)+f[now]*s......
  • 数据结构算法系列----对动态规划的感悟
    简介:   最近我一直在做和复习动态规划的题目,对动态规划有了一些新的理解和感悟。本文就是基于最近做的一些题目写的。一、动态规划的题目形式和选择   当题目是对于求某一串数字或者字符的最值时,一般就回想到三种解法,dfs暴搜、动态规划、贪心。在这三个之中显......