自学嵌入式第二十六天:数据结构-哈希表、内核链表

一、哈希表

1.提供一种可以存储和查找的数据结构,为了提高查找的速度而生;时间复杂度是(O(1)-O(logn));

2.对需要统计的数字直接定址;

fun(key)=存储位置;key是要存储的数据;

fun叫哈希函数,把key值转成存储的下标;

key可以是数可以是其他数据;

用于存储数据的空间一般是一段连续的存储空间;

3.哈希函数(fun)设计的要求:计算尽量快捷方便,地址尽量均匀;

对于数字一般是求余;

冲突:fun(key1)==fun(key2)

线性探测,+1,+2...

二次探测,+1,-1,+2,-2....

随机探测,rand()

二、快速排序

取中间值,把小于中间值的数调到左边,大于中间值的数调到右边;

连续递归;

三、内核链表

1.在内核中链表结点仅有两个指针,且是双向循环链表;

2.数据域和指针域分离;链表的功能扩展能力变强

3.container_of(tmp,per,node)

使用container_of带参宏可以得到指向数据的指针;

4.list_for_each_entry_safe(pos,n,head,member)

遍历

pos:当前要访问的数据的结构体指针,n是pos的下一个,head是链表的头结点,member是自定义的结构体中结点的变量名;

5.head头结点不包含有效元素,head->next是链表中第一个有效数据;

相关推荐
稚辉君.MCA_P8_Java16 分钟前
Gemini永久会员 Java动态规划
java·数据结构·leetcode·排序算法·动态规划
cookqq1 小时前
mongodb根据索引IXSCAN 查询记录流程
数据结构·数据库·sql·mongodb·nosql
ohyeah2 小时前
栈:那个“先进后出”的小可爱,其实超好用!
前端·数据结构
历程里程碑3 小时前
各种排序法大全
c语言·数据结构·笔记·算法·排序算法
树在风中摇曳3 小时前
带哨兵位的双向循环链表详解(含 C 代码)+ LeetCode138 深度解析 + 顺序表 vs 链表缓存机制对比(图解 CPU 层级)
c语言·链表·缓存
文涛是个小白呀4 小时前
Java集合大调研
java·学习·链表·面试
embrace995 小时前
【C语言学习】结构体详解
android·c语言·开发语言·数据结构·学习·算法·青少年编程
代码不停5 小时前
Java单链表和哈希表题目练习
java·开发语言·散列表
稚辉君.MCA_P8_Java5 小时前
通义 Go 语言实现的插入排序(Insertion Sort)
数据结构·后端·算法·架构·golang
稚辉君.MCA_P8_Java6 小时前
Gemini永久会员 Go 实现动态规划
数据结构·后端·算法·golang·动态规划