哈希表是一种数据的存储和查找方式
数据的大小是字节描述,那么数据的存储就是一个利用空间的过程
数据量很大时候,几百G,几亿条,查找起来是多么费事,当然你可以排序等算法简化,但依然于事无补
生活中的存储 中药店的药箱根据药材分类存放,药箱内再放个九宫格
根据算法得到分类 根据key计算哈希值,得到一级存放位置,如果内部有多个数据,则挨个比较
从乱序中找到一对一关系,再从遗漏的部分,挨个比较,就是哈希的思想
链式哈希:
基础块 是数据key对应的value,value一般为void*,这样可以转换为任意的一般为结构体指针
每次插入都需要申请malloc内存
哈希值值对应存储 对链表的插入删除,动态大小
哈希表 可以固定大小,malloc内存,内部存放链表的头指针
指向哈希表 二级指针
二级指针
数组定义和指针基本一样,只不过在于指针指向大小不同
char a[10];char *a,sizeof(a)的值不同,不过在声明不可见范围,a是一样的仅指针大小,例如a作为参数传参
数组和指针只是赋值方式不同,都可以通过下表访问一定范围地址的内容,
当指针指向数组时候,可以理解数组就是指针,指针就是数组
此外,指针可以指向变量和函数
二级指针就是指向了一个指针的指针,被指向的指针可能是函数,数组,变量
当被指向的指针是数组时候,那么就是哈希表了
char* a[]是指针数组,那么指向数组内第一个元素的指针就是二级指针
char **b = &a[0];那么b[0]就是a[0],b指向一个指针数组
哈希表首先指向一个指针数组,数组内指针是链表的首地址