美文网首页
线性表的链式存储结构Java实现

线性表的链式存储结构Java实现

作者: pujess | 来源:发表于2019-07-28 17:45 被阅读0次

    有了前面文章的铺垫:
    数据结构的基本理解
    线性表及其顺序存储结构的理解
    线性表的顺序存储结构java实现
    线性表链式存储就很容易理解啦

    要注意链表插入和删除的时间为O(1),原因是只用第一次插入找到第i位相应的地址,之后都可以记住地址一下子找到

    1.Data部分

    • 就是一个数据域
    • 和一个指针域
    public class LinkList {
        public Object data;
        public LinkList nextNode;
    
        public LinkList(Object data) {
            this.data = data;
            this.nextNode = null;
        }
    }
    

    2.Operation部分

    public class LinkListOp {
        public static void main(String[] arg0) {
            //实例化一个操作类
            LinkListOp a = new LinkListOp();
            //这个是链表
            LinkList L1 = a.initLi();
            //这个是新建的结点
            LinkList L2 = new LinkList("pujess");
            
            a.insertLi(L1, 1,L2);
            LinkList L3 = a.getLi(L1, 1);
            System.out.println(L3.data);
            System.out.println(L1.data);
            System.out.println(L1.nextNode);
            a.deletLi(L1, 1);
            System.out.println(L1.data);
            System.out.println(L1.nextNode);
        }
        public LinkList initLi() {
            LinkList L = new LinkList(1);
            return L;
        }
    
        public int insertLi(LinkList L, int i, LinkList data) {
            // 抛出异常
            if (i <= 0) {
                return 0;
            }
            // 头结点存储的时候数组长度
            L.data = (int) L.data + 1;
            // 找第i-1+1个位置:因为头结点不存放数据但是占了第一个位置
            for (int m = 1; m < i - 1 + 1; m++) {
                if (L.nextNode == null) {
                    // 由于没有到第i个位置链表已经终止,所以i是超过了数组长度的,返回错误
                    return 0;
                }
                L = L.nextNode;
            }
            
            // 插入
            data.nextNode = L.nextNode;
            L.nextNode = data;
    
            return 1;
        }
        public int deletLi(LinkList L, int i) {
            // 抛出异常
            if (i <= 0) {
                return 0;
            }
            // 头结点存储的时候数组长度
            L.data = (int) L.data - 1;
            // 找第i+1-1个位置:因为头结点不存放数据但是占了第一个位置
            for (int m = 1; m < i + 1 - 1 ; m++) {
                if (L.nextNode == null) {
                    // 由于没有到第i个位置链表已经终止,所以i是超过了数组长度的,返回错误
                    return 0;
                }
                L = L.nextNode;
            }
    
            // 删除
            L.nextNode = L.nextNode.nextNode;
    
            return 1;
        }
    
        public LinkList getLi(LinkList L, int i) {
            // 找存放数据的第i+1-1个位置
            for (int m = 1; m < i + 1 - 1; m++) {
                if (L.nextNode == null) {
                    // 由于没有到第i个位置链表已经终止,所以i是超过了数组长度的,返回空
                    return null;
                }
                L = L.nextNode;
            }
            return L.nextNode;
        }
    }
    

    相关文章

      网友评论

          本文标题:线性表的链式存储结构Java实现

          本文链接:https://www.haomeiwen.com/subject/muyprctx.html