• 读大话数据结构之线性表


    第三章 线性表

    3.1 线性表的定义

    线性表:零个或多个数据元素的有限序列。

    说明:线性表是一个序列。也就是说,元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。

    线性表强调是有序的。

    3.2 线性表的顺序存储结构

    3.2.1 顺序存储定义

    线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

    3.2.2 顺序存储方式

    顺序存储结构需要有三个特性:

    1)存储空间的起始位置;

    2)线性表的最大存储容量;

    3)线性表的当前长度。

    3.2.3 数组长度和线性表长度的区别

    数组长度:存放线性表的存储空间的长度,存储分配后这个量一般是不变的;

    线性表长度:线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。

    随机存储结构:随机存取就是直接存取,可以通过下标直接访问的那种数据结构,与存储位置无关,例如数组。

    3.3 顺序存储结构的插入和删除

    3.3.1 插入操作

    插入算法的思路:

    ·如果插入位置不合理,抛出异常;

    ·如果线性表长度大于等于数组长度,则抛出异常或动态增加容量;

    ·从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;

    ·将要插入元素填入位置i处;

    ·表长加1.

    3.3.2 删除操作

    删除操作的思路:

    ·如果删除位置不合理,抛出异常;

    ·取出删除元素;

    ·从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;

    ·表长减1.

    3.3.3 线性表顺序存储结构的优缺点

    优点:

    ·无须为表示表中元素之间的逻辑关系而增加额外的存储空间;

    ·可以快速地存取表中任一位置的元素(时间复杂度为O(1)).

    缺点:

    ·插入和删除操作需要移动大量元素;

    ·当线性表长度变化较大时,难以确定存储空间的容量;

    ·造成存储空间的碎片

    3.4 线性表的链式存储结构

    线性表链式存储结构定义:

    为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称作指针或链。这两部分信息组成数据元素ai的存储映像,成为结点(Node)。

    如果一个链表的每个结点中只包含一个指针域,则叫做单链表。

    我们把链表中第一个结点的存储位置叫做头指针。

    有时为了更加方便的对链表进行操作,会在单链表的第一个结点前附设一个结点,称为头结点。

    3.5 单链表的整表创建

    头插法:

     尾插法:

    3.6 单链表结构与顺序存储结构优缺点

     结论:

    ·若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构。若需要频繁插入和删除时,宜采用单链表结构。

    ·当线性表中的元素个数变化较大或者根本不知道有多大时,最好用单链表结构,这样可以不需要考虑存储空间的大小问题。

    3.7 静态链表

    概念:用数组描述的链表叫做静态链表。

    数组的第一个元素,即下标为0的元素的cur就存放备用链表的第一个结点的下标;而数组的最后一个元素的cur则存放第一个有数值的元素的下标,相当于单链表的头节点作用,当整个链表为空时,则为0,表示无指向。

    现在如果我们需要在之间插入一个值为的元素,只需要将cur改为7,表示下一位是,并将cur改为3,表示下一位是丁。如图3-12-3所示。

    现在如果我们删除了第一个元素,表示现在这个位置空出来了,如果未来有新人要来则优先考虑这里,所以删除的位置成为第一个优先空位,即首元素的cur1, 第一个元素位置的cur改为8,而下标为8的位置cur改为9,最后元素位置的cur改为2,如图3-12-4所示。

     

    静态链表的优缺点:

    静态链表在插入和删除操作时不需要移动元素,只需要修改游标,从而改进了在顺序存储结构中插入和删除操作需要移动

    大量元素的缺点;但并没有解决连续分配存储带来的表长难以确定的问题;并且失去了顺序存储结构随机存取的特性。

    3.8 循环链表

    将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list)

    3.9 双向链表

    双向链表(double linked list)是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。

  • 相关阅读:
    洛谷P1056_排座椅 贪心+桶排思想
    NOIP普及组相关
    洛谷P1464_Function 记忆化搜索
    Xcode的使用技巧
    MAC_XCODE清理
    输入框跟随键盘移动效果的实现
    #pragma的进阶用法
    iOS 逆向
    警告框
    UIImageView设置圆角的方式
  • 原文地址:https://www.cnblogs.com/jacob-wuhan/p/12942857.html
Copyright © 2020-2023  润新知