• 数据结构之 线性表


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

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

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

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

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

      顺序表 链表
    定义

    顺序存储

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

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

    链接存储

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

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

    建立

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

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

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

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

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

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

    内存分配方式

    (基于空间考虑)

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

    存储密度

    (基于空间考虑)

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

    存取方法

    (基于时间考虑)

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

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

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

    顺序存取结构。

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

    插入、删除操作

    (基于时间考虑)

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

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

    其时间复杂度为O(n) 

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

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

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

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

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

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

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

  • 相关阅读:
    Generator 函数的异步应用
    Generator 函数的语法
    10 个最佳的 Node.js 的 MVC 框架
    Node.js 框架对比之 Express VS Koa
    JavaScript资源分享
    【转载】Web 研发模式演变
    学习资源整理
    超高影响力开源大放送,学习开发必备教科书
    LVS + KEEPALIVED + WINDOWS SERVER 2008 R2 ------高可用负载均衡(转)
    LVS DR模式 RealServer 为 Windows 2008 R2配置
  • 原文地址:https://www.cnblogs.com/dengguangxue/p/10764930.html
Copyright © 2020-2023  润新知