草庐IT

手撕LRU和LFU缓存淘汰算法

目录一.LRU缓存淘汰算法1.LRU基本介绍2.LRU算法描述3.LRU算法设计4.代码实现二.LFU缓存淘汰算法1.LFU基本介绍2.LFU算法描述3.LFU算法设计4.代码实现一.LRU缓存淘汰算法1.LRU基本介绍LRU(LeastRecentlyUsed,最近最少使用)算法是一种用于页面置换的算法,通常应用于操作系统的虚拟内存管理中。其原理是,当内存不足时,系统会将最久未被使用的页面(也就是最近最少使用的页面)替换出内存,从而腾出空间供新的页面使用。LRU算法维护了一个页面使用的时间戳队列,每当一个页面被访问时,就将其对应的时间戳更新为当前时间,并将该页面移到队列的末尾。当内存不足时,

【数据结构】手撕排序NO.2----直接插入排序与希尔排序

 目录一.导入二.直接插入排序    2.1基本思想    2.2过程分析        2.3代码实现    2.4复杂度/稳定性分析三.希尔排序(缩小增量排序)    3.1基本思想    3.2过程分析         3.3代码实现         3.4复杂度/稳定性分析 一.导入    本期是排序篇的第二期,我们的主角是插入排序。在座的各位或多或少都玩过扑克牌吧!我们在摸扑克牌时,往往会将大牌插到小牌后面,小牌插到大牌前面。当摸完所有的牌后,我们手中的牌自然也就有序了,这实际上就是用到了插入排序的思想本期要点对直接插入排序进行解析对希尔排序进行解析两种插入排序的复杂度和稳定性进行分

手撕前端面试题【javascript~文件扩展名、分隔符、单向绑定、判断版本、深浅拷贝、内存泄露等】

前端的那些基本标签🍓🍓直角三角形🍓🍓文件扩展名🍓🍓分隔符🍓🍓单向绑定🍓🍓创建数组🍓🍓判断版本🍓🍓什么是深拷贝,什么是浅拷贝,二者有什么区别,平时改怎么区分呢?💖💖js中不同类型存放的位置不同💖💖深拷贝与浅拷贝的区别🍓🍓js中哪些操作会造成内存泄漏?html页面的骨架,相当于人的骨头,只有骨头是不是看着有点瘆人,只有HTML也是如此。css,相当于把骨架修饰起来,相当于人的皮肉。js(javascripts),动起来,相当于人的血液,大脑等一切能使人动起来的器官或者其他的。在刷题之前先介绍一下牛客。Leetcode有的刷题牛客都有,除此之外牛客里面还有招聘(社招和校招)、一些上岸大厂的大佬的面试

手撕前端面试题【javascript~文件扩展名、分隔符、单向绑定、判断版本、深浅拷贝、内存泄露等】

前端的那些基本标签🍓🍓直角三角形🍓🍓文件扩展名🍓🍓分隔符🍓🍓单向绑定🍓🍓创建数组🍓🍓判断版本🍓🍓什么是深拷贝,什么是浅拷贝,二者有什么区别,平时改怎么区分呢?💖💖js中不同类型存放的位置不同💖💖深拷贝与浅拷贝的区别🍓🍓js中哪些操作会造成内存泄漏?html页面的骨架,相当于人的骨头,只有骨头是不是看着有点瘆人,只有HTML也是如此。css,相当于把骨架修饰起来,相当于人的皮肉。js(javascripts),动起来,相当于人的血液,大脑等一切能使人动起来的器官或者其他的。在刷题之前先介绍一下牛客。Leetcode有的刷题牛客都有,除此之外牛客里面还有招聘(社招和校招)、一些上岸大厂的大佬的面试

数据结构---手撕图解单链表---phead的多种传参方式对比和辅助理解

文章目录为什么要引入链表?单链表单链表的定义和原理单链表的头插对于指针的深层次理解链表的尾插封装malloc函数尾删头删查找链表中元素的插入在某节点前插入在某节点后插入链表中元素的删除删除pos位置的值删除pos元素之后的值链表的销毁关于链表传参问题如何改变phead所有图片为什么要引入链表?前面我们知道了顺序表,当顺序表的容量到达上限后就需要申请新的空间,而申请新空间就会遇到一些问题1.当利用realloc函数进行申请新空间时,会涉及到开辟新空间–拷贝原有数据–释放原空间这三个步骤,而这三个步骤会有不小的损耗2.增容一般是2倍的增长,势必会有一部分空间的浪费,如果我们扩容了100个单位大小的

【数字IC手撕代码】Verilog轮询仲裁器|题目|原理|设计|仿真

芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球四社区联合力荐!近500篇数字IC精品文章收录!【数字IC精品文章收录】学习路线·基础知识·总线·脚本语言·芯片求职·EDA工具·低功耗设计Verilog·STA·设计·验证·FPGA·架构·AMBA·书籍Verilog固定优先级仲裁器一、前言二、题目三、原理四、RTL设计五、Testbench仿真六、仿真分析一、前言本系列旨在提供100%准确的数字IC设计/验证手撕代码环节的题目,原理,RTL设计,Testbench和参考仿真波形,每篇文章的内容都经过仿真核对。快速导航链接如下:1.奇数分频2.偶数分频3.半整数分

【数字IC手撕代码】Verilog轮询仲裁器|题目|原理|设计|仿真

芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球四社区联合力荐!近500篇数字IC精品文章收录!【数字IC精品文章收录】学习路线·基础知识·总线·脚本语言·芯片求职·EDA工具·低功耗设计Verilog·STA·设计·验证·FPGA·架构·AMBA·书籍Verilog固定优先级仲裁器一、前言二、题目三、原理四、RTL设计五、Testbench仿真六、仿真分析一、前言本系列旨在提供100%准确的数字IC设计/验证手撕代码环节的题目,原理,RTL设计,Testbench和参考仿真波形,每篇文章的内容都经过仿真核对。快速导航链接如下:1.奇数分频2.偶数分频3.半整数分

【手撕排序算法】---基数排序

个人主页:平行线也会相交欢迎点赞👍收藏✨留言✉加关注💓本文由平行线也会相交原创收录于专栏【数据结构初阶(C实现)】我们直到一般的排序都是通过关键字的比较和移动这两种操作来进行排序的。而今天介绍的基数排序并不是依靠关键字的比较和移动来进行数据元素的排序。基数排序是一种借助多关键字的思想对单逻辑关键字进行排序方法。本文目录1️⃣样例演示2️⃣基数排序介绍3️⃣算法思想4️⃣代码示例5️⃣总结1️⃣样例演示基数排序的概念描述和思想比较难懂,所以我们先来一个样例演示。然后再来细细品味基数排序的概念和思想。我们对下面这个数组中的元素进行排序来进行演示:intarr[10]={17720864910586

「Java数据结构」:手撕二维数组和稀疏数组相互转换。

目录一、稀疏数组1、什么是稀疏数组2、图示    ​3、稀疏数组的表达方式二、二维数组→稀疏数组 第一步:创建二维数组第二步:创建稀疏数组,并赋值第三步:遍历二维数组并赋值给稀疏数组完整代码三、稀疏数组→二维数组第一步:创建新的二维数组第二步:循环遍历并赋值完整代码一、稀疏数组1、什么是稀疏数组       当一个数组中大部分元素为0,或者为同一个值的数组时,可以用稀疏数组来保存该数组。稀疏数组,记录一共有几行几列,有多少个不为零的值或相同的值。        简单来说就是将大规模的数组缩小成小规模的数据,从而减少空间浪费。2、图示         上面的图示中,左侧是二维数组,右侧是稀疏数组

[数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)

目录1、常见的排序算法1.1交换排序基本思想2、快速排序的实现方法2.1基本思想3hoare(霍尔)版本3.1实现思路3.2思路图解3.3为什么实现思路的步骤2、3不能交换3.4hoare版本代码实现3.5hoare版本代码测试4、挖坑法4.1实现思路4.2思路图解4.3挖坑法代码实现4.4挖坑法代码测试5、前后指针版本5.1实现思路5.2思路图解5.3前后指针法代码实现5.4前后指针法代码测试6、时间复杂度分析6.1最好情况6.2最坏情况7、优化快速排序7.1选key优化7.2小区间优化1、常见的排序算法1.1交换排序基本思想冒泡排序属于交换排序之一,我们先来了解以下冒泡排序思想。基本思想: