在上一节中我们实现了双向链表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. CocoaPods私有库搭建的记录
  2. 禁止windows系统的自动运行功能
  3. 802.11n 连接的建议设置是什么?
  4. 网站精准定位从这三方面着手
  5. Node.js in IIS — Hello World
  6. poj1061-青蛙的约会
  7. C# SharpMap 学习总结
  8. 千万条数据快速导入MySQL
  9. go json部分解析_Go语言爱好者周刊:第 60 期 — 今天这题你做对了吗?
  10. Windows Django 开发环境搭建
  11. 莫名其妙的解决了MagicDraw中文问题
  12. 面试智力题精选:扑克牌问题
  13. 技术管理岗岗位职责总结
  14. Jvm与DVM与ART
  15. web前端网页制作课作业:用DIV+CSS技术设计的静态网站【四大名著】中国传统文化主题题材设计
  16. 【Jekyll】记录一下启动服务器时遇到的问题
  17. 大数据分析案例-基于决策树算法构建员工离职预测模型
  18. GO学习笔记1.5:第一个GO项目常见问题
  19. python进行简单的文本相似度分析
  20. python 性能优化

热门文章

  1. datatables实现分页
  2. 滴滴java开发面试题_滴滴java开发工程师面试问题解答(第一回)
  3. spring定时任务+线池程实现
  4. python提示没有找到pymysql_python3 pymysql
  5. 罗技GHUB下载安装缓慢的问题
  6. 程序员必备的21种“设计模式之道”!
  7. c语言枚举进程以及遇到的编码问题
  8. install命令详解
  9. 【linux基本操作】
  10. python:实现pdf文件加盖骑缝章