zoukankan      html  css  js  c++  java
  • 线性表及其实现(顺序存储方式)

    ---

    Linear List

    Definition

    image-20210402144554222

    基本运算(操作)

    image-20210402144756819

    值传递和引用传递

    值传递相当于在函数test内部创建了x的副本,修改发生在新副本上而不影响原x的值

    image-20210402145816696

    引用传递相当于给出对象的引用(内存地址),函数可以直接访问到地址指向的对象并对其操作

    image-20210402150127591

    在java中,primitive(原始数据类型)均通过进行传递,其余对象均通过引用传递

    对应在C++里,通过指明引用标识符&表示此处使用引用传递

    线性表小结

    image-20210402150657685

    前面说到,线性表是一种ADT,定义了数据结构三要素中的逻辑结构数据的运算(基本操作),即定义了数据结构,接下来讨论如何实现数据结构,即对线性表的存储结构(物理结构)进行实现

    例如,下面谈到的顺序表就是用顺序存储的方式实现的线性表

    顺序表(Sequence List)

    image-20210402151929570

    静态分配

    image-20210402152514934

    代码分析

    image-20210402153100854

    ---如果不对数据元素赋初值0会怎样?---

    image-20210402153142914

    ---如图,内存中可能存在未被flush掉的脏数据,但不影响实际操作,因此可以省略---

    静态分配存在的问题

    image-20210402153715164

    动态分配

    image-20210402154255541

    代码分析

    image-20210402155034570

    动态分配本质上是在内存中开辟了一段新的存储空间,通过临时指针p将原空间数据复制迁移到新空间中,最后更新原数组指针,原理类似 Java 中的 ArrayList

    特点

    image-20210402160343416

    顺序表小结

    image-20210402160638604

    顺序表的操作(数据运算)

    image-20210405170038835

    插入

    image-20210405170946268

    ---注意操作的有效性判断---

    顺序表的物理结构采用顺序存储,每次插入需要将后面的数据整体向后平移一格,因此最坏的时间复杂度为O(n)

    删除

    image-20210405171959756

    ---注意通过引用&拿到原操作数据而非副本---

    删除操作同样需要对后续数据进行前移,因此时间复杂度为O(n)

    查找

    按位查找

    image-20210405173111722

    指针在内存中的步长对程序员是透明的,底层会自动根据数据类型的大小知道指针每次应该移动的长度

    image-20210405173435783

    随机存储:查找第i个数据的时间复杂度为O(1)

    按值查找

    image-20210405173829195

    image-20210405174053018

    注意结构体的比较不能直接使用 ==

    上面的算法采用正向遍历比较,时间复杂度为O(n)

    顺序表小结

    image-20210405174530470

  • 相关阅读:
    Windows下对函数打桩,及Linux类似技术
    WIN10重启后,在任务栏下添加快捷工具栏消失问题修复
    VS2012下std::function的BUG解决办法
    【转载】inno setup 水波纹效果,检测安装vcredist_x86.exe等
    ArchLinux下XFCE的一个问题修复:thunar加载的环境变量不正确
    Daliy Algorithm (GPLT)-- day 94
    Daliy Algorithm (greedy , hash )-- day 93
    Daliy Algorithm (tarjan, greedy, bfs )-- day 92
    Daliy Algorithm (heap,greedy , IQ )-- day 91
    Daliy Algorithm (cf , GPLT )-- day 90
  • 原文地址:https://www.cnblogs.com/potofsalt/p/14611151.html
Copyright © 2011-2022 走看看