• 数据结构之数组与链表(一)


    数组

      

       

    • 创建一个数组,必须声明其长度,以在内存中寻找合适的一段连续存储单元。这也意味着数组的大小是固定的,我们无法动态调整其大小。

    • 想要获取数组中第i个元素,其时间复杂度是 O(1),因为可以根据其地址直接找到它。同理修改也是。

    • 数组对查询表现一般,要想查找一个元素,需要遍历,时间复杂度为O(n)

    • 因为地址连续,想要在数组中插入一个元素是复杂的,因为从插入位置起,后边的所有元素都需要向后移动一位。同理删除也是,只是移动方向为向前。并且,当数组存满时,就无法继续插入了。

    • 因为数组要占据一整块内存,有可能产生许多的碎片,也可能因为找不到合适的内存块,而导致存储失败。

          总结起来就是:数组大小固定,查找迅速,增删复杂,需要完整的内存块,容易产生碎片。

    链表

      

    • 声明一个链表时,不需要知道其长度,也不需要连续的内存块,所以其大小可以动态调整。

    • 链表的每个元素都分为数据域和指针域,前者是实际存储的数据,后者则指向下一个元素的地址。和数组相比,每个元素需要占用的内存更大了。

    • 要获取链表的第 i 个元素变得复杂,因为其地址存放在它上一个元素的指针域里,所以只能从第一个元素起,进行 i 次操作。同理修改也是。

    • 链表对查询表现也一般,需要遍历,时间复杂度为O(n)

    • 增加与删除一个元素更方便了,因为没有对内存地址的限制,我们只需要在对应节点合理处理下指针域的值,就可以把一个元素插入链表或者从链表删除。

    • 链表对内存的要求很小,只要能够存储下一个数据元素的内存块都可以使用,因此不会造成碎片化。

      总结起来就是:大小可以动态调整,增删迅速,查找较慢,数据元素所占内存略多,不需要整块内存块,不会造成碎片化。

    数组与链表的选择

    • 数组按位置查找迅速,链表增删方便
    • 数组是固定大小,链表可以随时扩充与缩减
    • 链表每个元素占据内存略多于数组
    • 数组和链表在查询方面表现都比较一般,耗时较长

    出处:https://www.jianshu.com/p/407afb4a267a

  • 相关阅读:
    大道至简伪代码形式读后感
    大道至简读后感
    使用类型转换生成六位验证字符,实现用户输入验证码的功能
    flex弹性布局的基本介绍
    清除浮动的方法以及为什么清除浮动
    :target伪类制作tab选项卡
    div中的内容水平垂直居中
    setTimeout和setInterval的区别以及如何写出效率高的倒计时
    margintop影响父元素定位
    关于页面中弹窗的定位问题
  • 原文地址:https://www.cnblogs.com/ryjJava/p/14024542.html
Copyright © 2020-2023  润新知