散列-分离链接法(数据结构与算法分析-C语言描述)

本文介绍了散列技术,特别是散列函数和分离链接法在处理冲突中的应用。通过结构体定义、初始化、查找和插入操作,详细阐述了分离链接表(哈希表)的工作原理,以C语言描述实现。
摘要由CSDN通过智能技术生成

  散列是一种以常数平均时间执行插入、删除和查找的技术。但是,那些需要元素间任何排序信息的操作将不会得到有效的支持。
  
  理想的散列表是一个具有固定大小的数组。把表的大小记作TableSize,通常的习惯是让表从0到TableSize - 1变化。每个关键字被映射到从0到TableSize - 1这个范围中的某个数,并且被放到适当的单元中。这个映射就叫做散列函数(hash function)。理想情况下它应该运算简单并且应该保证任何两个不同的关键字映射到不同的单元。但这是不可能的,因为单元的数目有限,而关键字是无穷的。
  
  两个不同的关键字散列到同一个值的时候,我们称之为冲突(collision),假设散列函数为Hash(X) = X mod 10,那么当关键字为10、20、30时都会被映射到 0 这个单元,这样就产生了冲突。
  
  处理冲突的方法主要有“分离链接法”和“开放地址法”。这里主要说明“分离链接法”。(注:Hash Table可以翻译为散列表,也可以音译为哈希表)

〇、结构体定义

struct ListNode     //链表的节点定义
{
    int element;
    struct ListNode *next;
};

struct HashTbl      //哈希表定义
{
    int tablesize;  //哈希表的大小
    struct ListNode **thelists; //thelists为指向链表节点ListNode的指针的指针 
};                                  

  其中难点在于struct ListNode **theli

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值