acm算法基础5 Hash表

本文介绍了Hash表作为查找结构的特性,它结合了数组和链表的优点,提供快速定位和灵活储存。文章通过类比电话簿解释了Hash表的工作原理,强调了良好划分对于保持高效查找的重要性。内容涵盖了Hash表的创建、查找、插入和删除等基本操作,适合ACM算法学习者入门。
摘要由CSDN通过智能技术生成

2013 年 5 月 22 日 by sciencefans

今天看Harvard的CS50第13Lesson,视频最后教授给大家布置了一个作业,要求在复杂度小于O(Log2(N))的时间内查找给定数据,当然数据的读入不计入总时间。于是就兴高采烈地翘了物理课Google了一下hash,结果一泡就是一下午。。。
Hash是一个介于数组和链表之间的一种查找结构,它结合了数组的快速定位优点和链表的储存于堆中大小限制低以及收放自如的优点。
Hash表是一个类似电话薄的结构,先将元素分类,再在各类中顺序查找。所以复杂度取决于类的划分。划分的好的话可以达到常数复杂度的效果,划分的不好会变成线性搜索。一般采用动态划分。
下面是一个简单的Hash举例。


a)定义hash表和基本数据节点

 1 typedef struct _NODE
 2 {
 3 int data;
 4 struct _NODE* next;
 5 }NODE;
 6 
 7 typedef struct _HASH_TABLE
 8 {
 9 NODE* value[10];
10 }HASH_TABLE;

 

b)创建hash

1 HASH_TABLE* create_hash_table()
2 {
3 HASH_TABLE* pHashTbl = (HASH_TABLE*)malloc(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值