首页 > 编程语言 >Java实现静态链表

Java实现静态链表

时间:2024-02-20 11:58:43浏览次数:25  
标签:Java cur space 静态 链表 int data public

本文参照了大话数据结构的静态链表的c语言实现


package com.luoyi.list;


/**
 * @Description 静态链表
 * @Author Luoyi
 * @Date 2024/2/19
 *
 * 注:1. 索引为0的节点不存放数据,cur指向第一个空闲节点的下标
 *    2.  最后一个元素(即下标Maxsize-1)的cur指向第一个有效数据的下标,初始化为0
 */


class StaticNode {
    Object data;
    int cur;

    public StaticNode(Object data, int cur) {
        this.data = data;
        this.cur = cur;
    }
}

public class StaticList {
    StaticNode[] space;
    public static final int MAX_SIZE = 10;
    int currentFree;  // 目前空闲节点
    int length;       // 表的长度

    public StaticList() {
        space = new StaticNode[MAX_SIZE];
        currentFree = 1;
        length = 0;

        // 初始化链表中的各个节点
        for (int i = 0; i < space.length - 1; i++) {
            space[i] = new StaticNode(null, i + 1);
        }
        space[MAX_SIZE - 1] = new StaticNode(null, 0);
    }

    /**
     * 获取空闲节点的下标
     */
    public int Malloc_SLL() {
        int i = space[0].cur;
        if (i != 0) {
            space[0].cur = space[i].cur;    // 这一段代码非常关键!!
            // 确保i=0的cur始终指向空闲节点
        }
        return i;
    }

    /**
     * 增加节点
     */
    public void add(Object data, int i) {
        if (i < 1 || i > MAX_SIZE - 1) {
            System.out.println("插入的值不在范围之内");
            return;
        }
        currentFree = Malloc_SLL();
        int j = MAX_SIZE - 1;
        int k;
        for (k = 1; k < i; k++) {    // TODO: 2024/2/20   必须确保索引为1的位置已经被插入了
            j = space[j].cur;        // j 始终为被插入元素的上一个索引
        }
        space[currentFree].data = data;
        space[currentFree].cur = space[j].cur;  // 确保插入元素的cur指向上一个索引的cur,也就是0
        space[j].cur = currentFree;  // TODO: 2024/2/20 确保最后一个元素的指针指向第一个有效数据,确保能够遍历


    }

    /**
     * 打印链表元素
     */
    public void displayList() {
        System.out.print("链表元素: ");
        for (int currentIndex = space[MAX_SIZE - 1].cur; currentIndex != 0; currentIndex = space[currentIndex].cur) {
            System.out.print(space[currentIndex].data + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        StaticList staticList = new StaticList();

        // 添加节点
        staticList.add(10,1);
        staticList.add(20,2);
        staticList.add(30,3);

        // 打印链表元素
        staticList.displayList();
    }
}

标签:Java,cur,space,静态,链表,int,data,public
From: https://www.cnblogs.com/pohongying/p/18022787

相关文章

  • 「Java开发指南」MyEclipse如何支持Spring Scaffolding?(三)
    在上文中主要为大家介绍了CRUDScaffolding,本文将继续介绍应用程序的分层、代码助手等。MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981欢迎一起进群讨论3.应用程序的分层应用程序分层是应用程序开发领域中非常常见的体系结构方法,应用程序分层包括将应用程序代......
  • Java SE 完结心得
    昨天刚看完JavaSE的最后一节课,Java基础阶段将近花费了35天的时间,这个时间相对来说是比较长的。整个阶段学习状态也是断断续续的,没有每天按时的学习,经常是今天学完,明天不学了。下面开始学习Javaweb的时候,要及时的调整自己的状态。不能每天在满不在乎的了。基础阶段跟的是黑马......
  • java1.8LocalDate日期常用函数
    LocalDatenow=LocalDate.now();//获取当前日期2023-12-31Stringformat=LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss"));//获取当前时间2023-12-3115:44:52intmonthValue=now.getMonthValue();//返回当前的月份intdayOfMonth=now.......
  • 基于Java+SpringBoot+vue的采购管理系统(源码及功能分析)
    前言:随着全球化和信息化的发展,企业采购管理面临越来越多的挑战。传统的采购方式往往涉及到多个繁琐的步骤,包括供应商筛选、询价、招投标等,这些过程不仅耗时,而且容易出错。为了解决这些问题,供应商、询价、招投标一体化系统应运而生。该系统通过集成供应商管理、询价管理、招投标......
  • java图片压缩
    /***压缩图片并返回字节数组*@paramfile*@return*@throwsException*/privatebyte[]compress(Filefile)throwsException{Filetemp=newFile(file.getAbsolutePath());//scale:大小//outputQualit......
  • Java项目计算程序执行时间方法
    一、总结1.1、使用System.currentTimeMillis();计算程序执行毫秒数 //开始时间1 longstartTime1=System.currentTimeMillis(); Thread.sleep(100); //结束时间1 longendTime1=System.currentTimeMillis(); //开始时间2 longstartTime2=System.current......
  • java.util.Optional 是 Java 8 引入的一个类,用于处理可能为 null 的值。它可以避免 Nu
    可以使用 Optional 来包装可能为 null 的值,然后通过一系列方法来处理这个值,例如 isPresent() 检查是否有值,orElse() 获取值或默认值,map() 对值进行转换等。这样可以更安全地处理可能为 null 的情况。 importjava.util.Optional;publicclassOptionalExample{  ......
  • Java集合篇之set,面试官:请说一说HashSet、LinkedHashSet、TreeSet的区别?
    写在开头Java的集合世界中主要由List,Set,Queue,Map构成,我们在之前的博文中已经学习了List,接下来我们继续学习Set集合。Set特点:存取无序,不可以存放重复的元素,不可以用下标对元素进行操作HashSet作为Set容器的代表子类,HashSet经常被用到,我们通过源码去分析它【源码查看】public......
  • JavaSE的第六步 —— 运算符优先级问题以及类型转换
    一、运算符优先级一般来说不需要刻意去记这些运算符的优先级,当你对这些运算的先后顺序存在疑惑的时候,不需要多想什么,直接使用()将之括起来就好但大体上的优先级顺序还是需要了解一下的排在首位的就是括号运算符,无论什么时候,你都可以相信括号接下来的运算符就是①、[{一元运算......
  • 深入理解 Java 方法重载与递归应用
    Java方法重载方法重载允许在同一个类中定义多个具有相同名称的方法,但参数列表必须不同。语法:returnTypemethodName(parameter1,parameter2,...,parameterN){//方法体}示例:publicclassMain{//重载add方法,支持int和double类型参数staticinta......