数据结构与算法(三)-线性表之静态链表

 前言:前面介绍的线性表的顺序存储结构和链式存储结构中,都有对对象地引用或指向,也就是编程语言中有引用或者指针,那么在没有引用或指针的语言中,该怎么实现这个的数据结构呢?

一、简介

  定义:用数组代替指针或引用来描述单链表,即用数组描述的链表叫做静态链表,这种描述方法叫做游标实现法;
  上面的静态链表图有两个数组游标数据,其中数据数组存储数据,而游标数组存储同下标为数据的下一个数据的下标值,简单模拟一下静态链表遍历的过程:
  1. 先查看下标为999的游标数组值:1;
  2. 根据游标数组值1,查找下标为1的数据:A;
  3. 然后查看游标数组为1的值:2;
  4. 根据游标数组值为2查找对应的数据数组的值:C;
  5. 然后循环3->4,直至游标数组的值为0;

二、代码实现

  静态链表的创建:
  • 我们对数组的第一个和最后一个元素做特殊处理,他们的data不存放数据;
  • 我们通常把未使用的数组元素称为备用链表;
  • 数组的第一个元素,即下标为0的那个元素的cur就存放备用链表的第一个结点的下标;
  • 数组的最后一个元素,即下标为MAXSIZE-1的cur则存放第一个有数值的元素的下标,相当于单链表中的头结点作用;
  静态链表创建代码实现:
复制代码
 public class StaticChain<T> {      //数据链    private T[] datas;      //游标链    private int[] vernier;      private Integer size;      private Integer length = 1000;      StaticChain() {         datas = (T[])new Object[length];         vernier = new int[length];         //将游标链的末位(头结点)初始化为1(下一节点的位置)        vernier[length-1]=1;         //将游标链的首位(空闲位的位置)初始化为1        vernier[0]=1;         size = 0;     }  }
复制代码
  插入操作:

    1、获取游标链下标为0的值为空闲位置的下标,并将该值对应下标所在的值放在游标链下标为0的地方;

    2、在5的位置插入值F,并将下标为5的游标链的值修改为0;

    3、若插入值为末位则直接将对应下标为4的游标链的值改为5,否则循环查找要插入值的上一位,并对应下标为4的游标链的值改为5;

 

插入操作代码如下:
 add()
删除操作:

   1、查找到要删除的节点的下标,将其对应的游标链的值取出来放在上一个游标链的指;

   2、并将删除的结点对应的游标链的值改为当前空闲指的下标,将空闲值的下标改为当前删除节点的下标;

删除操作代码如下:
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信