java 静态链表实现示例详解

 更新时间:2023年06月02日 14:18:33   作者:雨翔河  
这篇文章主要为大家介绍了java 静态链表实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

试着用 java 来实现下链表,因为 java 没有指针概念的缘故,用数组的下标来代替指针,这样一个静态链表就出来了。

静态双向不循环链表

public class Test {
    public static void main(String[] args) {
        L l = new L();
        l.init();
        l.insert(123);
        l.insert(456);
        l.insert(789);
        l.insert(222);
        int removeIndex = l.insert(333);
        l.show();
        l.removeNode(removeIndex);
        l.show();
        System.exit(0);
    }
}
/**
 * 静态链表
 */
class L {
    private static final int MAX = 100;  //链表的最大容量
    private Node node[] = new Node[MAX];
    private int head;  //头指针,头指针区域可存储数据也可以不存储数据,只用来做向导,我这里是存储了数据.
    class Node {
        public int next = -1;  //指针指向的后一个节点
        public int pre = -1;  //指针指向的前一个节点
        public long value = -1;  //节点的值
    }
    /**
     * 初始化链表空间,其实这个可以在实例化类的时候完成的.
     */
    public void init() {
        head = 0;
        for (int i = 0; i < MAX; i++) {
            node[i] = new Node();
            node[i].next = -1;  //为了简单的实现下,假设空值为-1
            node[i].pre = -1;
            node[i].value = -1;
        }
    }
    /**
     * 分配节点空间,类似于c里的malloc
     *
     * @return int
     */
    public int malloc() {
        for (int i = 0; i < MAX; i++) {
            if (node[i].pre < 0 && node[i].next < 0 && node[i].value < 0) {
                return i;
            }
        }
        System.out.println("malloc fail ,full");
        return -1;
    }
    /**
     * 移除节点
     *
     * @param indexNode indexNode
     */
    public void removeNode(int indexNode) {
        if (indexNode < 0) {
            System.out.println("removeNode indexNode is error");
            return;
        }
        int preNode = node[indexNode].pre;
        int nextNode = node[indexNode].next;
        node[indexNode].pre = -1;
        node[indexNode].next = -1;
        node[indexNode].value = -1;
        if (nextNode >= 0) {
            node[nextNode].pre = preNode;
        }
        //头节点被移除
        if (preNode < 0) {
            head = nextNode;
        } else {
            node[preNode].next = nextNode;
        }
    }
    /**
     * 插入节点
     *
     * @param v v
     */
    public int insert(long v) {
        int index = head;
        while (node[index].next >= 0) {
            index = node[index].next;
        }
        int insertNodeIndex = malloc();
        if (insertNodeIndex < 0) {
            System.out.println("malloc error,please check malloc function.");
            return -1;
        }
        node[insertNodeIndex].value = v;
        if (insertNodeIndex == head) {
            node[insertNodeIndex].pre = -1;
        } else {
            node[index].next = insertNodeIndex;
            node[insertNodeIndex].pre = index;
        }
        return insertNodeIndex;
    }
    /**
     * 测试下显示这个链表
     */
    public void show() {
        int index = head;
        System.out.println("show l:-------------------------");
        while (node[index].next >= 0) {
            System.out.println(node[index].value);
            index = node[index].next;
        }
        System.out.println(node[index].value);
        System.out.println("show l end:-----------------------");
        System.out.println("test show l start:_______________");
        while (node[index].pre >= 0) {
            System.out.println(node[index].value);
            index = node[index].pre;
        }
        System.out.println(node[index].value);
        System.out.println("test show l end:_______________");
    }
}

以上就是java 静态链表实现示例详解的详细内容,更多关于java 静态链表的资料请关注脚本之家其它相关文章!

相关文章

  • java中对象和JSON格式的转换方法代码

    java中对象和JSON格式的转换方法代码

    JSON格式可以轻松地以面向对象的方式转换为Java对象,下面这篇文章主要给大家介绍了关于java中对象和JSON格式的转换方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • SpringBoot中优化Undertow性能的方法总结

    SpringBoot中优化Undertow性能的方法总结

    Undertow是一个采用 Java 开发的灵活的高性能Web服务器,提供包括阻塞和基于NIO的非堵塞机制,本文将给大家介绍SpringBoot中优化Undertow性能的方法,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-08-08
  • Spring中的依赖注入DI详解

    Spring中的依赖注入DI详解

    这篇文章主要介绍了Spring中的依赖注入DI详解,组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将依赖关系注入到组件之中,依赖注入的目的并非为软件系统带来更多功能,是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台,需要的朋友可以参考下
    2024-01-01
  • idea如何修改文件的file is read-only问题

    idea如何修改文件的file is read-only问题

    这篇文章主要介绍了idea如何修改文件的file is read-only问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • IDEA生成patch和使用patch的方法实现

    IDEA生成patch和使用patch的方法实现

    比如你本地修复的 bug,需要把增量文件发给客户,很多场景下大家都需要手工整理修改的文件,并整理好目录,这个很麻烦,那有没有简单的技巧呢?本文主要介绍了IDEA生成patch和使用patch的方法实现,感兴趣的可以了解一下
    2023-08-08
  • SpringBoot热重启配置详解

    SpringBoot热重启配置详解

    在本篇文章里小编给大家分享的是关于SpringBoot热重启配置知识点内容,需要的朋友们可以学习下。
    2020-02-02
  • Java 注解学习笔记

    Java 注解学习笔记

    这篇文章主要介绍了Java 注解的相关资料,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • java使用归并删除法删除二叉树中节点的方法

    java使用归并删除法删除二叉树中节点的方法

    这篇文章主要介绍了java使用归并删除法删除二叉树中节点的方法,实例分析了java二叉树算法的相关操作技巧,需要的朋友可以参考下
    2015-05-05
  • 浅谈java安全编码指南之死锁dead lock

    浅谈java安全编码指南之死锁dead lock

    java中为了保证共享数据的安全性,我们引入了锁的机制。有了锁就有可能产生死锁。死锁的原因就是多个线程锁住了对方所需要的资源,然后现有的资源又没有释放,从而导致循环等待的情况。通常来说如果不同的线程对加锁和释放锁的顺序不一致的话,就很有可能产生死锁。
    2021-06-06
  • SpringCloud gateway跨域配置的操作

    SpringCloud gateway跨域配置的操作

    这篇文章主要介绍了SpringCloud gateway跨域配置的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论