• 内存的工作原理(数组和链表比较)


    一、内存的工作原理

    1.个人理解:

      比如你要去逛超市,需要将东西寄存,寄存处有一个柜子,柜子有很多抽屉。每个抽屉可以放一样东西,你有两样东西,所以要了两个抽屉。这大概就是计算机内存的工作原理。计算机就像很多抽屉的集合体,每个抽屉都有地址。

      当你需要将数据存储到内存时,你请求计算机提供存储空间,计算机会给你一个存储地址。但是当你要存储多项数据时,有两种基本方式:1.使用数组 2.使用链表,但是他们并不是都适用于所有的情形,要进行适当的选择。

    2.数组和链表

    数组:在内存中都是相连的(紧靠在一起的)

    链表:链表中的严肃可存储在内存的任何地方。链表的每个元素都存储了下一个元素的地址,从而使得一系列随机的内存地址串在了一起。

    • 访问元素(查询):数组更好选择

      但是链表存在问题,比如当你需要读取链表的最后一个元素时,你不能直接读取,因为你根本不知道它所处的地址,所以必须先访问第一个元素,然后获取第二个元素的地址,在访问第三个,以此类推,直到访问到最后一个元素。当你需要同时读取所有元素时,链表的效率很高。但是当你需要跳跃读取某个元素,链表的效率很低。数组不一样,因为你是知道每个元素的地址的,根据数组的下标可以算出来。比如一个数组里有五个元素,起始地址为000,那么第五个元素的地址肯定是004.所以当你需要随机访问元素时,数组效率很高,可以迅速的找到数组的任何元素。在链表中,元素并非靠在一起,你无法迅速计算出第五个元素的内存地址,必须县访问第一个元素以获取第二个,依次下去。

    • 插入操作(中间插入):链表更好选择

      加入你要在中间插入一个元素,使用链表时,插入元素很简单,只需要修改前面那个元素的指针指向。但是使用数组时,则必须先将后面的元素都向后移动,如果没有足够的空间,可能还要将整个数组复制到其他地方。

    • 删除操作:链表更好选择

      因为你只需要修改前一个元素指向的地址就行。使用数组,删除元素后,比如将后面的元素都向前移动。不同于插入,删除元素总能成功。如果内存中没有足够的空间,插入操作可能失败,但是任何情况下都能将元素删除。

    数组和链表操作的运行时间比较
      数组 链表
    读取 O(1) O(N)
    插入 O(N) O(1)
    删除 O(N) O(1)

    by author:Foreordination

    2018-02-01 15:41:12

  • 相关阅读:
    this与$(this)的区别
    子元素筛选选择器
    内容筛选选择器
    基本筛选选择器
    jQuery对象与DOM对象及互相转化
    【题解】保安站岗[P2458]皇宫看守[LOJ10157][SDOI2006]
    【学习笔记】薛定谔的喵咪Cat—球盒问题(全详解)
    【题解】二逼平衡树 [P3380] [BZOJ3196] [Tyvj1730]
    【题解】TES-Intelligence Test
    【题解】自行车比赛 [AHOI2016] [P2777]
  • 原文地址:https://www.cnblogs.com/drq1/p/8399341.html
Copyright © 2020-2023  润新知