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

    删除的算法。

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

  • 相关阅读:
    [WPF VTK]三维图形开发基础(一)
    WP开发(一)
    [WPF VTK]三维图形开发基础(四)

    WIN8 下IE突然无法打开(管理员权限可打开)
    [WPF VTK]三维图形开发基础(三)
    堆排序、快排的坑
    双向链表之插入
    [WPF VTK]三维图形开发基础(二)
    [转载]Android界面设计学习日志(一)
  • 原文地址:https://www.cnblogs.com/VitoCorleone/p/3768208.html
Copyright © 2011-2022 走看看