链式存储结构之静态链表

1.静态链表

用数组代替指针来描述链表叫做静态链表。静态链表是为了给没有指针的高级语言设计的一种实现单链表能力的方法。首先让数组的元素都由两个数据域组成,data和cur,即数组的每一个下标都对应一个data和一个cur。

2.静态链表的初始化
静态链表的初始化如下图:


初始化静态链表的代码实现:

public static void initList(){
    ArrayData[] array=new ArrayData[maxSize];
    for(int i=0;i<maxSize-1;i++){
        array[i]=new ArrayData(null,i+1);
    }
    array[maxSize-1]=new ArrayData(null,0);
}
class ArrayData{
    Object data;
    int cur;
    public ArrayData(Object data,int cur){
        this.data=data;
        this.cur=cur;
    }
    @Override
    public String toString() {
        return "ArrayData [data=" + data + ", cur=" + cur + "]";
    }
}

3.静态链表的插入操作

静态链表进行插入时,将需要插入的元素作为备用链表的第一个结点,插入时直接将备用链表的第一个结点作为待插入的结点进行插入。备用

在静态链表中第i个数据元素之前插入新的数据元素e,算法实现思路:
    1. 首先判断i是否合法,即是否在链表长度范围之内;
    2. 找到空闲分量的下标;
    3. 将新的数据元素e赋值给空闲分量的data值;
    4. 找到第i个数据元素的前一个元素的cur,并将其指向新的数据元素的cur;(插入的数据元素与第i个数据元素之后的元素相链接)
    5. 将新数据元素的下标赋值给第i个数据元素前一个数据元素的cur;(插入的数据元素与第i个数据元素之前的数据元素相链接)

代码实现:

public static ArrayData[] insert(ArrayData[] arrays,int i,Object e){
    if(i<1 || i>arrays.length+1){
        System.out.println("i无效");
    }else{
        int j=maxSize-1;
        //获得空闲分量的第一个结点的下标
        int k=arrays[0].cur;
        //将e赋值给空闲分量的data
        arrays[k].data=e;
        for(int l=1;l<=i-1;l++){
            j=arrays[j].cur;
        }
        //第i个数据元素的前一个数据元素的cur,指向新的数据元素的cur
        arrays[k].cur=arrays[j].cur;
        //将新数据元素的下标赋值给第i个数据元素前一个数据元素的cur
        arrays[j].cur=k;
        arrays[0].cur=k+1;
    }
    return arrays;
}

4.静态链表的删除

代码实现:

public static ArrayData[] delete(ArrayData[] arrays,int i){
    if(i<1 || i>arrays.length){
        System.out.println("i无效");
    }else{
        int j=maxSize-1;
        int k;
        for(k=1;k<=i-1;k++){
            j=arrays[j].cur;
        }
        k=arrays[j].cur;
        arrays[j].cur=arrays[k].cur;
        //回收下标为i的结点
        arrays[i].cur=arrays[0].cur;
        arrays[0].cur=i;
    }
    return arrays;
}

原文地址:https://www.cnblogs.com/naihuangbao/p/10262364.html

时间: 2024-08-29 08:23:06

链式存储结构之静态链表的相关文章

二叉树的链式存储结构----二叉链表

头文件:head.h #include<string.h> #include<ctype.h> #include<malloc.h> /* malloc()等 */ #include<limits.h> /* INT_MAX等 */ #include<stdio.h> /* EOF(=^Z或F6),NULL */ #include<stdlib.h> /* atoi() */ #include<io.h> /* eof()

链式存储结构之单链表

1.线性表的链式存储结构 线性表的链式存储结构允许数据元素存在任意未被占用的内存空间,因为在线性表的链式存储结构中,除了存储数据元素相关的数据信息之外,还存储了数据元素的后继元素存储地址,这样通过当前数据元素很容易找到下一个数据元素. 链式存储结构中,存取一个数据元素内容信息和直接后继的存储位置的结构称为结点,存储数据元素内容信息的域称为数据域,存储直接后继存储位置的域称为指针域.n个结点链接成一个链表,每个结点中只包含一个指针域的称为单链表. 2.单链表 2.1 结点 代码实现单链表,首先需要

数据结构与算法——线性表链式存储结构(静态链表)

今天总结静态链表. 什么是静态链表? 我理解静态链表是一种伪链表,因为它没有使用指针.静态链表使用数组实现的,这个数组是一个结构体数组,结构体由数据域和指针域构成,与单链表不同的是,这个指针域并不是指针,而是一个整数,用来指向下一个结点(数组下标). 静态链表中实际上相当于有两个链表,一个时实际数据所构成的一个链表,另一个是数组中空元素所构成的链表,称为空闲链表或备用链表,用来存放插入进来的元素. 心得:静态链表感觉比单链表,双向链表绕很多,看书的时候,书上在释放结点空间那块写的很复杂,后来和我

数据结构之线性表——链式存储结构之单链表(php代码实现)

<?php /**  *  * 1. 类LNode用作创建单链表时,生成新的节点.  * 2. 类SingleLinkList用于创建单链表以及对单链表的一些操作方法(实例化此类就相当于创建了一个空链表)  * 3. CreateListHead: 具有$num个数据元素的单链表的创建--头插法  * 4. CreateListTail: 具有$num个数据元素的单链表的创建--尾插法  * 5. DestroyList: 销毁单链表  * 6. ClearList:清空单链表  * 7. Li

二叉树的链式存储结构--二叉链表

1 二叉树的链式存储结构 //二叉链表的结点结构定义 typedef struct BiTNode { int data; struct BiTNode *lchild; struct BiTNode *rchild; }BiTNode; typedef struct BiTNode *BiTree; 结构示意图如下: 2 二叉树的遍历方法 (1)前序遍历:先访问根结,然后前序遍历左子树,再前序遍历右子树. (2)

数据结构开发(5):线性表的链式存储结构

0.目录 1.线性表的链式存储结构 2.单链表的具体实现 3.顺序表和单链表的对比分析 4.小结 1.线性表的链式存储结构 顺序存储结构线性表的最大问题是: 插入和删除需要移动大量的元素!如何解决? 链式存储的定义: 为了表示每个数据元素与其直接后继元素之间的逻辑关系:数据元素除了存储本身的信息外,还需要存储其直接后继的信息. 链式存储逻辑结构: 基于链式存储结构的线性表中,每个结点都包含数据域和指针域 数据域:存储数据元素本身 指针域:存储相邻结点的地址 专业术语的统一: 顺序表 基于顺序存储

05.线性表(四)链式存储结构.静态链表

链式存储结构.静态链表   一.静态链表 1.静态链表存储结构 单链表是通过指针实现的,但是我们也可以通过数组来代替指针描述单链表,即静态链表.如何实现静态链表?构造数组的元素由两个数据域组成:data和cur,即数组的每个下标都对应一个data和一个cur. 数据域data:用来存放数据元素,即要处理的数据: 游标cur:存放该元素的后继在数组中的下标,相当于单链表中的next指针: 为了方便插入数据,我们通常会把数组建立得大一些,以便有一些空闲空间而不致于出现溢出情况. 线性表的静态链表存储

03.线性表(二)链式存储结构.单链表1

链式存储结构.单链表1 1.基本概念 为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置) (1)数据域:存储线性表数据元素数据信息的域称为数据域: (2)指针域:把存储直接后继位置(下一个数据元素的地址)的域称为指针域,指针域中存储的信息为指针或链: (3)结点(Node):由数据域和指针域两部分信息组成数据元素ai的存储映像,称为结点. (4)头指针:把链表中第一个结点的存储

04.线性表(三)链式存储结构.单链表2

链式存储结构.单链表2 顺序存储结构的创建实质是一个数组的初始化,存储空间连续且其大小和类型已经固定:单链表存储空间不连续,是一种动态结构且它所占用空间的大小和位置是不需要预先分配划定的,可以根据系统的情况和实际的需求即时生成. 一.单链表的整表创建 创建单链表的过程就是一个动态生成链表的过程,即从"空表"的初始化起,依次建立各元素结点,并逐个插入链表. 1.算法思路 (1)声明一个结点p和计数器变量i; (2)初始化一空链表L (3)让链表L的头结点的指针指向NULL,即建立一个带头