• 线性表


    一. 线性表

        线性表(List):零个或多个数据元素的有限序列。

        线性表中的元素有一对一的关系,表现为下一个Next、上一个Prev。首元素没有Prev,尾元素没有Next。

        抽象数据类型:

            1. Data()    获取线性表数据元素

            2. Add(T model)    添加数据元素

            3. Remove(T model)    移出数据元素

            4. Insert(T model)     插入数据元素

            5. Clear()     清空线性表

            6. Exists(T model)    是否存在数据元素

            7. Get(int num)     获取第几个数据元素

            8. Length()     返回列表的长度

            9. IsEmpty()   返回列表是否为空列表

    二. 线性表顺序存储结构

        用一段地址连续的存储单元依次存储线性表的数据元素。

        查询:可根据线性表的起始地址推算出任意位置的数据元素所在的地址,时间复杂度是 o(1)

                例:线性表l1的起始物理位置是100,l1每个数据元素所需空间大小为8,那l1第3个数据元素所在位置就是100+8*(3-1) = 116

        插入:在线性表的中间插入一个数据元素后,其位置后的所有元素的位置都需要后退一位,时间复杂度是 o(n)

        删除:在线性表的中间删除一个数据元素后,其位置后的所有元素的位置都需要前进一位,时间复杂度是 o(n)

        优点:

      1. 无须为表示元素之间的逻辑关系增加额外的存储空间

      2. 可以快速的获取表中的任一位置的元素

        缺点:

      1. 当线性表长度变化较大时,难以确定存储空间的容量

      2. 造成存储空间的“碎片”

      3. 插入和删除操作需要移动大量元素,较慢

    三. 线性表链式存储结构

        线性表顺序结构最大的缺点是插入、删除操作会移动大量的元素,在插入、删除操作比较多的情景下就不适用了。能不能想办法解决呢?

        首先看看,为什么顺序结构在插入、删除时需要移动大量的元素?仔细分析后,发现原因就在于相邻两元素的存储位置也具备邻居关系,它们是有编号的,想找到彼此只要走一格去到他家就好了,不需要知道它的真实地址。邻居关系中间不会有空隙,也自然没有位置插入,删除后也要消除空隙。所以,只要去掉相邻元素的邻居关系,让每个元素在物理空间上是独立的个体,彼此通过真实地址关联就能解决之前提到的问题,插入时,只要修改前边的人保存的后续地址为自己,修改自己保存的后续地址为后边的人即可,其他的元素并不需要知道此事。这就是链式结构。

        链式结构中,除了要保存数据元素信息外,还要保存它后继元素的存储地址,类似于

      ​struct Node{

          ​object data;

          ​Node next;

      }

    优点

    1. 在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点

    2. 不会存在存储空间碎片,内存利用率高

    缺点

    1. 每个数据元素需要额外保存下一个元素的内存指针

    2. 查找数据元素需要遍历整个链表,时间复杂度未o(n)比顺序存储

    四. 循环链表

        ​对于单链表而言,每个结点只保存了向后的指针,到了尾指针就停止了向后链的操作,无法从尾指针跳转到头指针继续循环,只能初始化一个新的链表对象从头再来,在有这个需求的情景中是十分没有必要的。

        ​循环列表:将单链表中终端结点的指针由空指针改为指向头结点,这种头尾相连的单链表成为单循环链表,简称循环链表。单链表是一条线,循环链表是一个环。

        ​正常情况下,在一个环形链表中所有的结点的属性和行为都是相同的,不存在头结点和尾结点的概念,不过也可以通过保存头结点的地址来规定哪个结点是头结点。

    五. 双向链表

    ​    ​双向链表是在单链表的每个结点中,再设置一个纸箱其前驱结点的指针域。由此,一个结点既可以向后循环,又可以向前循环。

  • 相关阅读:
    UI自动化测试框架
    Pyse( selenium-api的二次封装)
    Selenium之webdriverAPI
    selenium 基础之定位方式
    html综合应用
    html基础之js操作
    html基础之Dom操作
    (九)Locust 参数化
    (八)Locust 设置断言
    (七)Locust 的类和方法
  • 原文地址:https://www.cnblogs.com/LTEF/p/11978744.html
Copyright © 2020-2023  润新知