zoukankan      html  css  js  c++  java
  • 数据结构,小步前进之线性表

    什么是线性表?

    顾名思义,就是具有线一样的特质的表。表的元素像直线一样排列。

    即“把所有数据用一根线儿串起来,再存储到物理空间中”。
    在这里插入图片描述
    例如在学生的成绩表中,一个学生的姓名、学号、成绩信息为一个结点,然后有一个开始结点(它的前面没记录)和一个终端结点(它的后面没记录)。这种逻辑结构称为线性表,请注意,是逻辑结构。

    1.集合中必存在唯一的一个“第一元素”。
    2.集合中必存在唯一的一个 “最后元素” 。
    3.除最后一个元素之外,均有唯一的后继(后件)。
    4.除第一个元素之外,均有唯一的前驱(前件)。

    线性表的表现方式

    顺序存储结构(顺序表)

    一般使用数组实现线性表的存储,可以使用数据索引进行查询,每个元素都是固定位置。

    优点

    便于查询

    得益于顺序存储结构,我们可以根据具体位置直接查询到我们所需要的值。

    节省逻辑结构空间

    不需要为结点之间的逻辑关系分配额外的存储空间。

    缺点

    移动大量元素

    就像排队有人插队一样,插入一个结点,则后面的结点全部需要往后移。

    存储空间不能充分利用
    因为需要预分配存储空间,所以分配空间时候一般按照最大分配,这样让存储空间不能得到充分利用。

    难以扩充
    当发现表的存储空间不够的时候,难以对其进行扩充,只能重新分配并复制。(ps:后有动态数组可解决这个问题,但是牺牲了效率)

    链式存储结构(链表)

    为了解决顺序存储结构删除插入效率低的弊病,分为两个域,一个数据域,一个指针域。数据域就是存数据的地方,指针域就是存指针的地方,指针域相当于门牌号,用于标明下一个结点的位置。

    优点

    删除和插入不需要移动位置,只需要更改指针域即可。时间复杂度O(1),如果需求要求多次删除插入就可以使用这个。

    缺点

    查询只能一个一个结点去遍历,效率低。
    在这里插入图片描述
    建议使用查看大图查看

    简短不疲倦,欢迎点赞

  • 相关阅读:
    洛谷1525关押罪犯——二分
    洛谷P1525关押罪犯——二分做法
    poj2411铺砖——状压DP
    1 理解Linux系统的“平均负载”
    3.2-3 tac、more
    3.20 tr:替换或删除字符
    3.14-19 wc、iconv、dos2unix、diff、vimdiff、rev
    3.21-22 od、tee
    指针和引用的区别
    new与malloc区别
  • 原文地址:https://www.cnblogs.com/ma-nong01/p/14323438.html
Copyright © 2011-2022 走看看