zoukankan      html  css  js  c++  java
  • 数据结构与算法--线性表系列(静态链表)

    hello,everybody.今天我们一起来学习,线性表的静态链表。C语言的指针变量,使我们可以操作内存的地址。但是,一些其他没有指针变量的设计语言,就没办法对内存进行操作。那我们上堂课的单链表,在这些没有指针的编程语言中,就无法实现了。这时候,静态链表就出生了。

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

    静态链表是为了,使那些没有指针的设计语言实现单链表能力的方法。它的思路是这样的,创建一个数组。使每个数组元素具有两个数据域,一个存放data,一个存放cur.cur,相当于单链表中的next。

    静态链表的结构代码:

    #define MAXSIZE 1000 /*假设链表的最大长度是1000*/

    typedef struct
    {
        ElemType data;
        int cur;/*游标(Cursor),为0时表示无指向*/
    }Component,StaticLinkList[MAXSIZE];

    我们把未被使用的数组元素称为备用链表,数组下标为0的数据元素,不存数据,它的cur存放的是备用链表的第一个结点的下标。

    而数组的最后一个下标的Cur存放的是第一个有数值的
    元素下标,相当于单链表中的头结点作用。
       image

    这张图,是一个空的静态链表。首先,第一个数组元素,data域不存数据。cur存放的是备用链表中的第一个未被使用分量的下标。因为是空表,所以下标为1的分量就是第一个未被使用的分量。再看最后一个数据元素,data域也是不存数据。cur存放的是第一个有值的数据元素的下标。相当于头结点。

    image

    这幅图,是初始化静态表的算法。

    静态链表的插入与删除:

    实现静态链表的插入与删除,需要我们实现生成结点,回收结点算法。下面是对应算法的截图:

    image

    生成结点的算法。

    image

    回收结点的算法.

    我们看一下插入算法:
    image

    删除的算法:

    image

    删除的算法。

    静态链表的优缺点:
    优点:
    在插入、删除操作时,只需要修改游标,不需要移动元素,从而改进了
    在顺序存储结构中的插入和删除操作需要移动大量的元素的缺点。
    缺点:
    没有解决连续分配带来的表长难以确定的问题
    失去了顺序存储随机存取的特性

  • 相关阅读:
    换装WIN10(windows)那点儿事,换装操作系统一文通,玩转安装操作系统
    Win10永久版低价购买及激活工具使用说明
    Win10系统自带软件删除和恢复工具
    微软免费AI作文打分软件升级:雅思考研四六级都能用,还能查单词给替换
    扫描全能王 v5.13.0.20190916 去水印和广告版
    Vue组件
    vue自定义过滤器的创建和使用
    vue自定义指令的创建和使用
    vue的基础使用
    vue的概述
  • 原文地址:https://www.cnblogs.com/VitoCorleone/p/3768208.html
Copyright © 2011-2022 走看看