zoukankan      html  css  js  c++  java
  • 算法复习(4)向量与列表

      向量是由一组元素封装而成的线性序列。向量是数组的抽象与泛化,元素类型可以灵活选取。向量使用连续的内存存储元素。一旦容量需要扩充,在紧临的后方再开辟一块内存(通常是倍增)。如果后方的内存不足,则寻找一块足够大的内存,开辟倍增的内存,再将原来的向量复制过来。

      向量是连续内存,所以循秩访问非常方便,通过指针计算,可以一步到位。同时,也由于必须是连续内存,在其中插入与删除元素,需要对后续的元素全部进行移动,操作复杂。

      列表采用动态储存策略。其中的元素称为节点。每个节点至少包含三个成员,数据、前指针和后指针。各节点通过指针相互联接,在逻辑上是一个线性结构。

      与向量中紧密的内存排布不同,列表的内存可以是不连续的,通过指针串在一起。通过操作符重载,列表也可以实现“循秩访问”,但实质上是逐次移动到秩代表的节点。列表可以方便的插入与删除。插入删除只用修改3个元素的指针指向即可,对其他元素无影响,效率较高。

      删除列表中元素的过程如下:

      先将元素的前后节点连接起来(p -> pred -> succ = p -> succ; p -> succ -> pred = p -> pred;)

      再delete p。

      向列表中插入元素的过程如下:

      新建节点,新建的过程中,将新节点是的指针正确指向。(node -> succ = p; node -> pred = p -> pred;)

      再将原节点及其前节点指针正确指向(p -> pred -> succ = node; p -> pred = node;)

      此处如果引入头尾不可见的哨兵节点,则代码通用。如果不引用,则需要对首末节点的情况单独处理。

  • 相关阅读:
    Java性能权威指南读书笔记--之二
    Java性能权威指南读书笔记--之一
    深入理解JVM-java字节码文件结构剖析(练习解读字节码)
    深入理解JVM-java字节码文件结构剖析(1)
    jvm(5)---垃圾回收(回收算法和垃圾收集器)
    jvm(4)---垃圾回收(哪些对象可以被回收)
    jvm(3)---常用监控工具指令
    jvm(2)---类加载机制
    jvm(1)---java内存结构
    Eureka客户端源码流程梳理
  • 原文地址:https://www.cnblogs.com/itit/p/3440748.html
Copyright © 2011-2022 走看看