Day2 线性表之数组与链表

数组

主题:为什么数组要从 0 开始编号?

问:什么是数组?
答:数组是一种线性表结构。用一组连续的内存空间来保存类型一致的数据。
例如 Java 中定义 int[] arr = new int[5];
 
问:如何实现随机访问?
答:两个概念
	1. 线性表,数组、链表、栈、队列
	2. 连续的内存空间和相同的数据类型
	所以才可以 随机访问(数组的杀手锏)

问:数组为什么插入和删除是低效的?
答: 
	插入/删除
		1. 末尾 O(1)
		2. 头部 O(n)

插曲:
JVM 的标记-清除算法

问:数组和链表的区别?
答:链表适合删除和插入,时间复杂度是 O(1);数组适合查找,支持随机访问,时间复杂度是 O(1)

再问: 为什么数组从 0 开始标号?
a[i] _address = base_address + i * type_size

在这里插入图片描述

链表

主题:如何实现 LRU 淘汰算法?

1. CPU 缓存
2. 数据库缓存
3. 浏览器缓存

问:常见的缓存淘汰策略?
答:
	1.	FIFO 先进先出 
	2.	LFU 最少使用
	3.	LRU 最近最少使用

问:常见的链表结构?
答:
	1. 单向链表
	2. 双向链表
	3. 循环链表
注意:
1. 头结点
2. 尾节点

删除操作:
1. 删除结点中 值=某值 的点------删除操作是O(1), 但是表里查找 O(n)
2. 删除给定指针指向的节点------单向链表是O(1), 双向链表是 O(n)

再问:如何实现 LRU 淘汰算法?
答:
	1. 如果数据之前已有,那么遍历将其原来位置删除,并将其插入表头
	2. 如果没有,判断缓存是否已满。如果已满,将链表尾结点删除,将新的结点插入头		  部;如果未满,将结点插入头部

扩展:
1. 结合哈希表实现,时间复杂度 O(1)
2. 使用数组实现 LRU

链表数组性能比较
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值