• 第1章第3节 线性表的比較


    本章主要介绍了下线性表的两种存储结构——顺序存储和链式存储。然后引入了大量的练习题来巩固这两种存储方式。


    继续使用第1章线性表 中的配图来比較下顺序表和链表。

    线性表的分类

    一.顺序表和链表的比較

    1.1存取方式

    • 顺序表既能够顺序存取,又能够随机存取;
    • 链表仅仅能从表头到表尾顺序存取。

    1.2逻辑结构与物理结构(存储方式)

    • 顺序表中。逻辑上相邻的元素。其相应的物理位置亦相邻。
    • 链表中。逻辑上相邻的元素。物理位置不一定相邻。其相应的逻辑关系是通过指针链接形成的。
      注:此处应注意差别存储方式和存取方式的基本定义。
        存取方式指的是读取数据的方式,比方随机存取,离散存取等;
        存储方式指的是数据的物理结构。比方顺序存储,离散存储等。

    1.3基本操作

    1.3.1查找操作

    • 按值查找

    顺序表无序的情况下,查找时间复杂度为O(n);若有序。查找时间复杂度为O(1)
    链表不管是否有序,查找时间复杂度均为O(n)

    • 按序号查找

    顺序表支持随机訪问,时间复杂度为O(1)
    链表须要从表头遍历到表尾。时间复杂度为O(n)

    1.3.2插入删除操作

    顺序表须要移动大量元素。时间复杂度为O(n)
    链表仅仅需改动节点的指针域就可以,时间复杂度为O(1)

    1.4空间分配

    顺序表在创建时就要求分配足够大的存储空间。
     採用静态分配时。若分配空间过大,则会造成浪费严重。若分配过小,则会造成溢出。
     採用动态分配时,扩充须要移动大量元素,造成操作效率低下;
    链表仅在须要的时候申请分配。仅仅要内存空间足够便可完毕分配。

    二.顺序表和链表在现实生活中的选择

    依据上述顺序表和链表的比較。使得我们更加熟悉了线性表的基本操作。对此我们变能够依据自身的需求来选择合适的线性表结构。

    以下说明几点參考标准:

    2.1基于存储的考虑

    对于线性表的长度或存储规模难以预计时,不宜採用顺序表;链表不用事先预计存储规模,但链表的存储密度比較低,显然採用链式存储的线性表存储密度是小于1的。

    2.2基于运算的考虑

    当我们在线性表操作中涉及到大量的按序号查找值的操作时,採用顺序表无疑是一种不错的选择,顺序表由于能够实现离散存取。时间复杂度仅为O(1)。而链表由于必须使用顺序存取,时间复杂度为O(n)


    假设实际使用中使用到了大量的插入和删除操作时,顺序表平均须要移动表中一半的元素。最坏时间复杂度为O(1);而链表做同样的操作时,时间复杂度仅为O(1)。明显。我们会选择链表。

    2.3基于环境的考虑

    顺序表easy实现,不论什么高级语言中都有数组类型;而链表的操作是基于指针的。有些高级语言中并不具备指针。

    总之,到底选择顺序表还是链表还是须要依据自身须要来确定,仅仅有合适的才是最好的。

  • 相关阅读:
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    210 Course ScheduleII
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    206. Reverse Linked List
    sql 开发经验
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7246191.html
Copyright © 2020-2023  润新知