zoukankan      html  css  js  c++  java
  • 链表03-开发可用链表(实现数据增加)

    指的是可以使用链表实现数据的增加、修改、删除、查询操作

    程序基本结构

      在开发具体的可用链表操作之前,首先必须明确一个道理:Node类负责所有节点数据的保存以及节点关系的匹配,所以Node类不可能单独去使用。而上一节的实现里面Node类是可以单独使用的,外部可以绕过Link类直接使用Node类,这样明显没有任何意义存在。所以下面必须修改设计结构,让Node类只被Link类使用

      这个时候使用内部类明显是一个合适的选择。内部类可以使用private定义,这样内部类只能被一个外部类所使用,另外一点,内部类可以方便的与外部类之间进行私有属性的直接访问

      链表的开发结构

    class Link{ // 链表类,外部只能看这一个类
        // 定义在内部,主要为Link类服务    
        private class Node{ // 定义的节点类
            private String data; // 保存数据
            private Node next; // 引用关系
            public Node(String data){
                this.data = data;
            }
            // ===================以上为内部类============================
        }
        private Node root; // 根结点
    
    }

       而随后主要就是进行代码的填充,以及功能的完善

    数据增加

      public void add(数据类型 变量)

       如果要进行新数据的增加,则应该由Link类负责节点对象的增加,并且由Link类维护根节点,所有节点的关系匹配交给Node负责处理

    class Link{ // 链表类,外部只能看这一个类
        // 定义在内部,主要为Link类服务    
        private class Node{ // 定义的节点类
            private String data; // 保存数据
            private Node next; // 引用关系
            public Node(String data){
                this.data = data;
            }
            public void AddNode(Node newNode){
                if(this.next == null){ // 当前的下一个节点为空
                    this.next = newNode;
                }else{     // 向后继续保存
                    this.next.AddNode(newNode);
                }
            }
    
            public void printNode(){ // 打印Node信息
                System.out.println(this.data);
                if( this.next != null){
                    this.next.printNode();
                }
            }
    
            // ===================以上为内部类============================
        }
        private Node root; // 根结点
        public void add(String data){  // 假设不允许有null
            if (data == null){
                return ;
            }
            Node newNode = new Node(data); // 要保存的数据
            if (this.root == null){ // 如果当前没有根节点,则设置为根节点
                this.root = newNode; // 保存根节点
            }else{ // 存在根节点,则到下一节点找保存数据
                this.root.AddNode(newNode);
            }
    
        }
    
        public void print(){ // 打印所有Node信息
            root.printNode();
        }
    
    }
    
    public class LinkDemo{
        public static void main(String args[]){
            Link all = new Link();
            all.add("Hello");
            all.add("World");
            all.add(null);
            all.print();
        }
    }

      此时使用了一个不许为null的判断。但并不是所有的链表都不许为null 

     本程序中,null不会被保存

  • 相关阅读:
    sun.misc.BASE64Encoder找不到jar包的解决方法
    mybatis中的#和$的区别
    mysql , oracle 从记录中查询出 楼盘下只有 no 公司的 楼盘
    Windows+Git+TortoiseGit+COPSSH 安装 教程
    oracle job 定时执行 存储过程
    如何在PL/SQL中修改ORACLE的字段顺序
    oracle创建数据库连接dblink
    oracle数据库去掉重复记录;只保留一条数据
    Oracle中like查询下划线等特殊字符的处理
    START WITH CONNECT BY PRIOR子句实现递归查询
  • 原文地址:https://www.cnblogs.com/anyux/p/11874094.html
Copyright © 2011-2022 走看看