Java教程

Java基础学习15

本文主要是介绍Java基础学习15,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

链表(单向链表的建立、删除、插入、打印)

1、链表一般分为:

单向链表

  双向链表

​ 环形链表

//链表
//数据结构核心组成:引用+递归
//数组是一个定长的线性结构
class Node{//只有node类才可以在保存数据的同时设置数据的先后关系
    private Object data ;//真正要保存的数据
    private Node next  ;//定义下一个节点
    //node类的核心作用在于保存数据和连接节点关系
    public Node(Object data){   //车厢里面一定要去保存有数据
        this.data = data;
    }
    public void setData(Object data){
        this.data = data;
    }
    public Object getData(){
        return this.data;
    }
    public void setNext(Node next){
        this.next = next;
    }
    public Node getNext(){
        return this.next;
    }
}
public class Day15 {
    public static void main(String[] args) throws Exception{
        //1、封装几个节点
        Node root = new Node("火车头");//现在假设存放的数据是string
        Node n1 = new Node("车厢A");
        Node n2 = new Node("车厢B");
        Node n3 = new Node("车厢C");
        //2、需要设置节点的关系
        root.setNext(n1);
        n1.setNext(n2);
        n2.setNext(n3);
        //3、输出节点
        print(root);
    }
    public static void print(Node node){
        if (node != null){//表示当前存在有节点
            System.out.println(node.getData());
            print(node.getNext());//继续向下取出
        }

    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JYaWQvGv-1633234349366)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210926195816584.png)]

数据的存储和返回

class Link{     //负责链表的操作
    //将Node定义为内部类,表示Node类只为Link类服务
    private class Node{     //负责数据与节点关系的匹配
        private Object data ;   //保存节点的数据
        private Node next ; //保存下一个节点
        public Node(Object data){
            this.data = data ;
        }
        //第一次调用:this = Link.root
        //第二次调用:this = Link.root.next
        //第三次调用:this = Link.root.next.next
        public void addNode(Node newNode){//处理节点关系
            if (this.next == null) {//当前节点下一个为空,表示可以保存
                this.next = newNode;
            }else {         //现在当前节点的下一个不为空
                this.next.addNode(newNode);
            }
        }
        //第一次调用:this = Link.root
        //第二次调用:this = Link.root.next
        public void toArrayNode(){
            Link.this.retData[Link.this.foot++] = this.data;
            if (this.next != null){     //现在还有下一个节点
                this.next.toArrayNode();
            }
        }
    }
    //--------------以下为Link类定义-------------------
    private Object[] retData;//返回类型
    private int foot = 0;//操作脚标
    private int count = 0;//当前的保存个数
    private Node root;//属于根节点,没根节点无法进行数据的保存,存第一个节点
    public void add(Object data){
        if (data == null){  //人为的追加了规定,不允许存放空值
            return;     //方法结束调用
        }
        //如果要进行数据的保存,那么必须将数据封装在Node节点
        //如果没有封装,则无法确认好节点的先后顺序
        Node newNode = new Node(data);
        if (this.root == null){     //当前并没有根节点
            this.root = newNode ;   //第一个节点设置为根节点
        }else {     //根节点已经存在了
            this.root.addNode(newNode);
        }
        this.count++;//数据累加处理
    }
    public int size(){      //取得元素个数
        return this.count ;
    }
    public boolean isEmpty(){//判断是否为空
        return this.root == null && this.count == 0 ;
    }
    public Object[] toArray(){
        if (this.count==0){
            return null ;
        }
        //现在链表中存在数据,则将开辟指定长度的数组
        //该数组一定要交给Node类进行处理。
        this.retData = new Object[this.count];
        this.foot = 0;//进行清零的处理,需要进行脚标的操作
        this.root.toArrayNode();//将数据的取出处理交给Node类完成
        return this.retData;
    }
}
public class Test24 {
    public static void main(String[] args) {
        Link all = new Link();
        System.out.println(all.size()+"="+all.isEmpty());
        all.add("hello");
        all.add("world");
        all.add("hehao");
        System.out.println(all.size()+"="+all.isEmpty());
        Object result [] = all.toArray();
        for (int x = 0;x< result.length;x++){
            System.out.println(result[x]);
        }
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wVQHKxsh-1633234349368)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210926195748128.png)]

x = 0;x< result.length;x++){
System.out.println(result[x]);
}
}
}

[外链图片转存中...(img-wVQHKxsh-1633234349368)]

这篇关于Java基础学习15的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!