第五章:面向对象基础——单向链表(1)。

实例要求

在数据结构中经常看见的一个基本概念,对于链表的实现都是基于引用数据类型的基本操作。

本章目标

  • 了解引用传递的深入应用
  • 了解链表的基本概念

1、具体内容

如果要想实现链表,则肯定要设计一个链表的节点类,在此类中
必须有一个属性可以保存下一个节点的引用地址。

根据此概念,设计一个节点类。

class Node{     // 定义节点类
    private String data ;   // 保存节点内容
    private Node next ;     // 表示保存下一个节点
    public Node(String data){       // 通过构造设置节点内容
        this.data = data ;  // 设置内容
    }
    public void setNext(Node next){
        this.next = next ;      // 设置下一个节点
    }
    public Node getNext(){  // 取得下一个节点
        return this.next ;
    }
    public String getData(){
        return this.data ;  // 取得节点的内容
    }
};

下面编写代码测试以上的节点类,首先应该掌握节点间的操作关系,之后再进行封装操作。

class Node{     // 定义节点类
    private String data ;   // 保存节点内容
    private Node next ;     // 表示保存下一个节点
    public Node(String data){       // 通过构造设置节点内容
        this.data = data ;  // 设置内容
    }
    public void setNext(Node next){
        this.next = next ;      // 设置下一个节点
    }
    public Node getNext(){  // 取得下一个节点
        return this.next ;
    }
    public String getData(){
        return this.data ;  // 取得节点的内容
    }
};
public class LinkDemo01{
    public static void main(String args[]){
        Node root = new Node("火车头") ;  // 定义根节点
        Node n1 = new Node("车厢-A") ;    // 定义第一个车厢(第一个节点)
        Node n2 = new Node("车厢-B") ;    // 定义第二个车厢(第二个节点)
        Node n3 = new Node("车厢-C") ;    // 定义第三个车厢(第三个节点)
        root.setNext(n1) ;          // 设置火车头的下一个节点是第一个车厢A
        n1.setNext(n2) ;            // 设置第一个车厢的下一个节点是第二个车厢
        n2.setNext(n3) ;            // 设置第二个车厢的下一个节点是第三个车厢
    }
};

基本关系已经确定出来了,如何输出呢?
如果想要进行输出,则肯定只能使用递归操作。

class Node{     // 定义节点类
    private String data ;   // 保存节点内容
    private Node next ;     // 表示保存下一个节点
    public Node(String data){       // 通过构造设置节点内容
        this.data = data ;  // 设置内容
    }
    public void setNext(Node next){
        this.next = next ;      // 设置下一个节点
    }
    public Node getNext(){  // 取得下一个节点
        return this.next ;
    }
    public String getData(){
        return this.data ;  // 取得节点的内容
    }
};
public class LinkDemo01{
    public static void main(String args[]){
        Node root = new Node("火车头") ;  // 定义根节点
        Node n1 = new Node("车厢-A") ;    // 定义第一个车厢(第一个节点)
        Node n2 = new Node("车厢-B") ;    // 定义第二个车厢(第二个节点)
        Node n3 = new Node("车厢-C") ;    // 定义第三个车厢(第三个节点)
        root.setNext(n1) ;          // 设置火车头的下一个节点是第一个车厢A
        n1.setNext(n2) ;            // 设置第一个车厢的下一个节点是第二个车厢
        n2.setNext(n3) ;            // 设置第二个车厢的下一个节点是第三个车厢
        printNode(root) ;           // 从头开始输出
    }
    public static void printNode(Node node){    // 输出节点
        System.out.print(node.getData() + "\t") ;   // 输出节点的内容
        if(node.getNext()!=null){       // 判断此节点是否存在下一个节点
            printNode(node.getNext()) ; // 向下继续输出
        }
    }
};
输出结果:
火车头 车厢-A    车厢-B    车厢-C    

2、总结

本程序中,所有的关系都是通过用户手工进行设置的,如果要想让其真正变得有意义,则需要为其加入一个操作的封装。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容