当前位置: 首页 > news >正文

数据结构哈希表--c

链表法(优化--红黑树)

1.首先初始化一个数组用来存放链表头结点地址

HashTable *create_table(int size) {HashTable *table = malloc(sizeof(HashTable));table->size = size;table->buckets = calloc(size, sizeof(HashNode *)); // calloc会把内存初始化为0/NULLreturn table;
}

2.然后创建一个待插入节点

HashNode *new_node = malloc(sizeof(HashNode)); // 分配节点内存
new_node->key = strdup("苹果");               // 复制键字符串(避免外部修改)
new_node->value = 5;                          // 存储值
new_node->next = NULL;                        // 新节点的next指针设为NULL(因为是第一个节点)

3.使用哈希函数计算苹果的哈希值为2,如果buckets[2]为NULL ,则表示没有冲突,将新节点地址存放到buckets[2]

table->buckets[index] = new_node; // buckets[2]现在指向新创建的“苹果”节点

此时,桶2的链表结构是:

buckets[2] → [key:"苹果", value:5, next:NULL]

4.此时假设要插入柚子 7  计算的哈希值与苹果冲突

(1)计算索引:还是2

(2)检查桶:buckets[2]不是NULL(已经有“苹果”节点)。

(3)遍历链表:比较“柚子”和“苹果”的键——不相等,说明没有重复。

(4)创建新节点:

初始化柚子

HashNode *new_node = malloc(sizeof(HashNode));
new_node->key = strdup("柚子");
new_node->value = 7;

头插法

new_node->next = table->buckets[2]; // 新节点的next指向原来的头节点(“苹果”)
table->buckets[2] = new_node;       // 桶的头指针更新为新节点(“柚子”)

此时,桶2的链表结构变成:

buckets[2] → [key:"柚子", value:7, next:→] [key:"苹果", value:5, next:NULL]

5.总结哈希表创建流程图

6.重要知识

a)哈希表为数组,数组存放节点链表的头结点地址;

b)使用哈希函数计算传入数据的哈希值 ,% 计算索引;

c)初始化待插入数据信息,检测该索引位置是否为NULL;

        若为NULL,将待插入的头结点地址传入数组【索引】中;

        若不为NULL,则将待插入节点插入桶中;

http://www.dtcms.com/a/445997.html

相关文章:

  • 腾云公司做网站赣州创可通科技有限公司
  • 大模型预训练深度解析:从基座构建到目标设计
  • 记一次网络io学习流水账
  • 网站建设与推广的实训报告天门网站网站建设
  • vue可以做pc的网站asp网站如何建设
  • YOLO11框架训练高光谱数据归一化问题
  • 宿迁网站定制有什么手机网站
  • 温州服务网站建设毕设用别人网站做原型
  • 八股文:计算机网络
  • MOVS 和MOVZ
  • llama.cpp RMSNorm CUDA 优化分析报告
  • 24ICPC成都站补题
  • DAY 41 简单CNN-2025.10.5
  • 网站建设的图片怎么加水印剪辑软件
  • 【c++】面 向 对 象 与 抽 象 数 据 类 型
  • 国内网站设计制作泰安招聘信息最新招聘2022
  • 第十二章:代理模式 - 访问控制的守护大师
  • 用wordpress建立学校网站网络营销软文案例
  • C++11线程相关
  • 住房和城乡建设统计网站网站开发公司需要招聘哪些人
  • 小土堆pytorch
  • 环保网站 中企动力建设专业的网站建设网络
  • 触摸未来2025.10.05:悟神经网络符号之伤,拥抱声音的宇宙
  • 大连鼎信网站建设wordpress简历模板
  • 关于运放的自激振荡和相位裕度
  • Edu164
  • 高端网站建设的网站四川城乡建设网站
  • 滑块(Slider)的原理与应用
  • 网站条形码如何做phpmysql网站开发技术项目式教程
  • 【LeetCode热题100】No.128——最长连续序列