• 数据结构之 线性表


    线性表是最基本、应用最广泛的一种数据结构。

    线性表的存储结构是指 为线性表所开辟的计算机存储空间以及采用的程序实现方法,其本质是逻辑结构到物理结构(存储结构)的映射。

    线性表的存储结构主要分为两类:

    1、定长的顺序存储结构,简称顺序表 

    2、变长的线性存储结构,简称链表(亦称链式存储结构)

      顺序表 链表
    定义

    顺序存储

    将线性表的所有数据元素,按其逻辑顺序依次存储在一组连续的内存单元中,

    用这种存储形式存储的线性表,称为线性表

    链接存储

    通过一组地址任意的存储单元来存储线性表中的数据元素,这些存储单元可以是连续的,

    也可以是不连续的,用这种存储形式存储的线性表,称为链表

    建立

    通过创建数组来建立,顺序表中的每个数据元素按其顺序有唯一的索引值,

    又称下标值,可以方便地访问数据元素内容

    从空表开始,每读入一个数据元素就申请一个相应的存储单元,对于每一个数据元素ai

    除了存放数据元素自身的数据信息外,还需要一个存放其直接后继ai+1的存储地址,

    其中存放自身数据的data称为数据域,存放直接后继地址的next称为指针域,这两部分构成一个“结点”。

    链表正是通过每一个结点的指针域,将线性表中的结点按其逻辑顺序依次连接在一起的

    内存分配方式

    (基于空间考虑)

    静态分配。程序执行前必须明确规定存储规模 动态分配。无需预先估计存储规模,可根据需要随时申请动态分配内存。

    存储密度

    (基于空间考虑)

    为1。易于事先确定其大小时,宜采用顺序表作为存储结构 <1。指针域占了部分存储量

    存取方法

    (基于时间考虑)

    随机存取结构。对表中任一结点都可在O(1)时间内直接取得。

    如果线性表的操作主要是进行查找,很少做插入和删除操作,

    应采用顺序表作为存储结构为宜

    顺序存取结构。

    链表中的结点需从头指针起,顺着链表扫描才能取得,其时间复杂度为O(n)

    插入、删除操作

    (基于时间考虑)

    在顺序表中进行插入和删除,平均要移动表中近一半的结点,

    尤其是当每个结点的信息量较大时,移动结点的时间开销就相当可观了,

    其时间复杂度为O(n) 

    在链表中的任何位置上进行插入和删除,都只需要修改指针。

    对于频繁进行插入和删除的线性表,宜采用链表作为存储结构。

    如果表的插入和删除主要发生在表的首尾两端,则最好采用尾指针表示的单循环链表。

    存储密度:结点数据本身所占的存储量和整个结点结构所占的存储量之比

    即存储密度 = (结点数据本身所占的存储量)/(结点结构所占的存储总量)、

    存储密度越大,则存储空间的利用率就越高

    共同学习,共同进步,若有补充,欢迎指出,谢谢!

  • 相关阅读:
    android基础开发之scrollview
    java网络---再论URL & URI
    Android Studio 有用的插件
    java网络---查找Internet
    java网络---流
    Qt学习之路(1)------Qt常用类用法说明
    将批量下载的博客导入到手机后,通过豆约翰博客阅读器APP(Android手机)进行浏览,白字黑底,保护眼睛,图文并茂。
    如何收藏互联网上的任意网页到系统某个分类下,之后进行批量导出发布等---博客备份专家的博文收藏功能您不可不知
    很喜欢看某方面的文章,如何将不同站点,不同博主同一类别的文章归类整合到一起,再批量导出成各种格式---豆约翰博客备份专家新增按分类收藏博文功能
    豆约翰博客备份专家博客导出示例(PDF,CHM)
  • 原文地址:https://www.cnblogs.com/dengguangxue/p/10764930.html
Copyright © 2020-2023  润新知