在上一节中我们实现了双向链表DoubleLinkedList类,本节我们基于双向链表实现FIFO(先进先出)缓存置换算法。

文章目录

  • 一、FIFO实现
  • 二、测试逻辑

一、FIFO实现

代码逻辑很简单,就是遵循先进先出的原则,具体流程都写在注释中了。通过一个map来实现查找时的O(1)复杂度

class FIFOCache(object):def __init__(self, capacity=0xffffffff):"""FIFO缓存置换算法:param capacity:"""self.capacity = capacityself.map = {}self.size = 0self.list = DoubleLinkedList(capacity)def get(self, key):"""获取元素不存在 返回None已存在 则返回缓存值:param key::return:"""# 当前缓存中不存在if key not in self.map:return None# 当前缓存中存在node = self.map.get(key)return node.valuedef put(self, key, value):"""添加元素已存在 更新值并添加至链表尾部不存在 判断缓存容量大小后添加:param key::param value::return: 已添加的节点"""# 当前缓存中已存在if key in self.map:node = self.map.get(key)self.list.remove(node)node.value = valueself.list.append(node)else:# 缓存容量达到上限 删除头结点if self.size >= self.capacity:old_node = self.list.pop()del self.map[old_node.key]self.size -= 1node = Node(key, value)self.map[key] = nodeself.list.append(node)self.size += 1return nodedef print(self):"""打印当前链表:return:"""self.list.print()# print(self.map)

二、测试逻辑

if __name__ == '__main__':fifo_cache = FIFOCache(2)fifo_cache.put(1, 1)fifo_cache.print()fifo_cache.put(2, 2)fifo_cache.print()print(fifo_cache.get(2))fifo_cache.put(3, 3)fifo_cache.print()print(fifo_cache.get(1))fifo_cache.put(2, 4)fifo_cache.print()

测试结果:

基础知识二、Python实现FIFO算法相关推荐

  1. 加密基础知识二 非对称加密RSA算法和对称加密

    一.RSA的计算过程 上述过程中,出现了公钥(3233,17)和私钥(3233,2753),这两组数字是怎么找出来的呢?参考RSA算法原理(二) 首字母缩写说明:E是加密(Encryption)D是解 ...

  2. CV:计算机视觉技术之图像基础知识(二)—以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础)

    CV:计算机视觉技术之图像基础知识(二)-以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础) 目录 ...

  3. Python基础笔记_Day01_计算机基础知识和Python开发环境搭建

    Day01_计算机基础知识和Python开发环境搭建 目录 01.01_计算机基础知识(计算机概述)(了解) 01.02_计算机基础知识(软件开发和计算机语言概述)(了解) 01.03_计算机基础知识 ...

  4. scikit-learn学习基础知识二

    scikit-learn学习基础知识二 文章目录 scikit-learn学习基础知识二 一.介绍 二.代码实现 三.运行结果 四.总结 一.介绍 本文我们学习scikit-learn中的KNeigh ...

  5. CV:计算机视觉技术之图像基础知识(二)—图像内核的可视化解释

    CV:计算机视觉技术之图像基础知识(二)-图像内核的可视化解释 目录 图像内核的可视化解释 测试九种卷积核 官方Demo DIY图片测试 DIY实时视频测试 相关文章 CV:计算机视觉技术之图像基础知 ...

  6. CV:计算机视觉技术之图像基础知识—以python的cv2库来了解计算机视觉图像基础

    CV:计算机视觉技术之图像基础知识-以python的cv2库来了解计算机视觉图像基础 目录 一.图像中的傅里叶变换 1.时域和频域 2.傅里叶变换 3.图像中的傅里叶变换

  7. (五)JS基础知识二(通过图理解原型和原型链)【三座大山之一,必考!!!】

    JS基础知识二(原型和原型链) 提问 class 继承 类型判断(instanceof) 原型 原型关系 基于原型的执行规则 原型链 说明 提问 如何准确判断一个变量是不是数组 class的原型本质 ...

  8. oracle:oracle基础知识(二)

    oracle基础知识(二)笔记:高级查询 文章目录 分组查询 多属性分组语法: 过滤查询 group by 语句增强 sqlplus报表功能 多表查询 等值连接 外连接 自连接 子查询 子查询中的空值 ...

  9. python的基础_python基础知识,python必背内容,一、python的基

    python基础知识,python必背内容,一.python的基 一.python的基础 1.简单写一行python代码:print('hello,world')print('你好,北京') 2.变量 ...

  10. python程序如何执行死刑_「Python基础知识」Python生成器函数

    原标题:「Python基础知识」Python生成器函数 对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采 ...

最新文章

  1. 安全攻防技能——Web安全——XSS
  2. asp.net oracle优化,[转]ASP.NET性能优化
  3. 关于CS架构文件传输流的问题,文中代码都是转自网上,但可保证代码无无误...
  4. Python: Console框消失
  5. 一个很好的机器学习普及网站
  6. SpringBoot自动装配探究
  7. [Java] 蓝桥杯ADV-214 算法提高 3-3求圆面积表面积体积
  8. 51Nod-1087 1 10 100 1000【模拟】
  9. python百度百科-Python语言的发展简史
  10. Vue源码分析 - mvvm.js
  11. 搜索场 day1 A 求和
  12. Windows10右键没有新建文本文件
  13. 机器学习三剑客之Matplotlib
  14. python解析GF1卫星数据.xml文件
  15. C#做小工具的时候碰到的问题
  16. AB1562_UT软件分辨真假洛达1562A,洛达1562a怎么鉴别?
  17. 安装alexa和google play
  18. SAP那些事-理论篇-7-SAP的优势和劣势
  19. C语言_结构体数组初始化
  20. vue echarts饼状图百分比展示

热门文章

  1. EXCEL带汉字如何求和
  2. dreamweaver半角空格_轻松处理Dreamweaver段落缩进
  3. c# , .net 后端判断是否是移动端,是否是安卓设备,是否是微信,是否是支付宝,是否是QQ,是否是安卓系统,是否是苹果系统等
  4. php mp3tag,Mp3tag官方下载 Mp3tag(MP3文件标签修改器) v3.05c 多语言中文安装版 下载-脚本之家...
  5. 一文带你彻底了解IIC协议
  6. Java 集合详解,常用集合类
  7. 草图大师模型是如何和3D模型交互的呢?草图溜溜叫你看
  8. JAVA Keytool工具生成Keystore和Truststore文件
  9. vue3实现页面刷新
  10. 【已解决】Springboot服务 Netty启动报错Failed to submit a listener