## [[数组]] - 一种线性数据结构,相同类型的元素存储于**连续**的内存空间中 - 元素在数组中的位置称为该元素的**索引** - 常用操作 - 初始化数组 - 访问元素 - > 索引本质上是内存地址的偏移量 - 插入元素 - 删除元素 - 遍历数组 - 查找元素 - 扩容数组 - 优点 - 空间效率高 - 支持随机访问 - 缓存局部性 - 局限性 - 插入与删除效率低 - 长度不可变 - 空间浪费 - 典型应用 - 随机访问 - 排序与搜索 - 查找表 - 机器学习 - 数据结构实现 - ## [[链表]] - 一种线性结构,每一个元素都是一个节点对象,各个节点之间通过**引用**连接 - 各个节点可以分散在内存各处,内存地址无需连续 - 链表的首个节点被称为**头节点**,最后一个元素称为**尾节点** - 尾部指向的是空 - > 相同数据量下,链表比数组占用更多内存空间 - 常用操作 - 初始化链表 - 插入节点 - 删除节点 - 访问节点 - 查找节点 - 常见链表类型 - 单向链表 - 环形链表 - 双向链表 - 典型应用 - 栈与队列 - 哈希表 - 图 - 高级数据结构 - 浏览器历史 - LRU算法 - 时间片轮转算法 - 数据缓冲区 - ## 列表 - 可以动态扩容的数组 - 常用操作 - 初始化列表 - 访问元素 - 插入与删除元素 - 遍历列表 - 拼接列表 - 排序列表 - 列表实现 - 初始容量 - 数量记录 - 扩容机制 - ## 内存与缓存 - > 物理结构在很大程度上决定了程序对内存和缓存的使用效率 - 金字塔结构 - ![image.png](../assets/image_1717128355392_0.png) - 硬盘难以被内存取代 - 缓存的大容量和高速度难以兼得 - 硬盘用于长期存储大量数据,内存用于临时存储程序中正在处理的数据,缓存用来存储经常访问的数据 - 数据结构的内存效率 - 内存是有限的且同一块内存不能被多个程序共享 - 随着反复申请与释放内存,空闲内存的碎片化程度会越来越高