zoukankan      html  css  js  c++  java
  • 顺序表和链表优缺点

    顺序表:

    他是在计算机内存中以数组形式保存的线性表。使用一组地址连续的存储单元依次存储数据元素的线性结构。

    单链表:

    是一种链式存储的结构。用一组地址任意的存储单元存放线性表中的数据元素。(存储地址空间不需要是连续的)

    优缺点:

    • 空间的开辟
      顺序表是需要开辟连续的空间,当需要的空间不够,而有需要插入的时候,就需要再重新开辟空间,将原先的内容拷贝到新的空间,这就开销比较大了。(而且当遇到非内壁类型的数据时,还要考虑深浅拷贝的问题)。而单链表则是每次只需要开辟一个节点,需要的时候再开辟。
    • 空间的使用
      但是我们要知道,如果我们已经清楚地知道需要用多少空间来存储数据了,那么我们是选择使用顺序表来进行存储的。因为单链表的话,因为每个节点都会有一个非数据项的指针,造成空间的浪费。并且每次都要开一个节点,每次开辟的地址都是随机的,可能会早成空间碎片。(这个问题在空间配置器后,会得到很好的解决,空间配置器也就是为了解决内存碎片的问题的)
      顺序表是可以直接先把空间开辟好的。不用进程开辟空间。所以这个时候,顺序表比较好了。
    • CPU高速缓存
      顺序表的空间一般都是连续开辟的,而且一次会开辟多个存储元素的空间,所以在使用顺序表的时候,可以一次把多个数据写入高速缓存区,再写入主存,顺序表的CPU告诉缓存效率是比较高的。
      而碎玉单链表来说,因为是存储一个数据才会开辟一个空间。所以数据存储时都要单独的写入高速缓存区,再写入主存,这就造成了,单链表的CPU高速缓存速率较低。
      那么,这样看来,是不觉得单链表就很垃圾了呢?
    • 时间上的比较
      1. 访问随机元素的时间复杂度:因为顺序表是像数组一样的。用下标来访问元素。支持随机访问。但是链表就不可以了,要找到某个元素,必须遍历单链表。所以单链表的时间复杂度是O(N) 顺序表是O(1)
      2. 随机插入删除元素:对于顺序表来说,插入是很费力的了,因为,只要插入,就意味着要挪动元素。开销大。但是对于单链表来说就很方便了,只要有这个位置,直接指针连上就好了。所以对于顺序表来说,插入就是O(N),而对于链表来说:O(1)
      3. 而对于线性表来说我们使用插入删除的操作要多一些,所以,用单链表相对要好。

    通过以上比较,我们可以知道,对于顺序表和单链表来说,各自各自的优缺点。按照我们的需要来进行选择。

  • 相关阅读:
    Python基于正则表达式实现文件内容替换的方法
    python数据处理实战
    python数据处理实战
    Python命令行参数解析模块getopt使用实例
    Python命令行参数解析模块getopt使用实例
    python命令行参数解析OptionParser类用法实例
    vim中权限不足时不用退出而强制保存
    C++11 STL算法简介
    每天一个linux命令(6) ar命令
    mysql++ Query
  • 原文地址:https://www.cnblogs.com/chan0311/p/9427311.html
Copyright © 2011-2022 走看看