简谈链表

1.链式存储
(1)链式存储是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的也可以是不连续的);
(2)为了表示每个数据元素a[i]与其直接后继元素a[i+1]的关系,对数据元素a[i]来说,不仅需要存储其自己本身的信息,还需存储一个指示其直接后继的信息,这两部分组成的信息称为结点。
2.结点的定义
结点包括数据域和指针域两部分
数据域:存储数据元素的信息
指针域:存储直接后继元素的存储位置(指针域中存储的信息称为指针或链),由n个结点连接而成的链表称为线性表。

/**
 * 创建一个结点
 * 结点包括两个数据域和指针域两个部分
 */
class Node{
    private int data;
    private Node next;//指针将一个个结点链接在一起

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }
}
public class 链表 {
    public static void main(String[] args) {
        /**
         * 向链表里面存储元素
         */
        Node head = new Node();//创建一个头结点
        head.setData(21);//通过set方法存储数据
        Node n = new Node();//想在放第二个数据,就需要再创建一个新的结点
        n.setData(34);//将第二个数据放进去
        head.setNext(n);
        /**
         * n把自己的地址通过set方法交给头结点head里面的指针Next,
         * 通过这种方法将两个数据连接起来,这样就可以通过指针来访问下一个结点的数据
         */
        n = new Node();//在添加第三个数据
        n.setData(23);
        head.getNext().setNext(n);//getNext拿到下一个结点的引用,再把新的地址交给上一个结点保存

        n = new Node();
        n.setData(18);
        head.getNext().getNext().setNext(n);
        System.out.println(head.getData());//用get方法取出数据第一个元素
        System.out.println(head.getNext().getData());
        System.out.println(head.getNext().getNext().getData());
        System.out.println(head.getNext().getNext().getNext().getData());
    }
}

对链表元素的一些操作

public class LinkedList1 {
    /**
     * 封装一个链表
     *
     * @param
     * @return
     */
    private class Node {//创建一个节点类(包括数据域和指针域两部分)
        private int data;
        private Node next;//指针将一个个结点链接在一起

        public Node getNext() {
            return next;
        }

        public int getData() {
            return data;
        }

        public void setData(int data) {
            this.data = data;
        }

        public void setNext(Node next) {
            this.next = next;
        }
    }

    private Node head = null;//一开始头结点为空
    private int size = 0;//元素个数
    public Integer get(int i) {
        if(i == 0) return head.getData();//取出头结点指向的结点数据
        Node temp = head;
        for(int t = 0;t < i;t++){
            temp = temp.getNext();
            if(temp == null) return null;
        }
       return temp.getData();
    }

    public void remove(int i) {

    }

    public void add(int n) {
        Node d = new Node();
        d.setData(n);//把n通过set方法赋值给d
        if(head == null){
            head = d;
        }else{
            Node temp = head;//将head的地址赋值给temp
         for(int i = 0;i < size - 1;i++){
            temp = temp.next;
         }
         temp.setNext(d);//给头结点所指向的next赋值
        }
        size++;
    }
}

public class TestLinkdlist1 {
    public static void main(String[] args) {
        LinkedList1 l = new LinkedList1();
        l.add(23);
        l.add(45);
        l.add(67);

        System.out.println(l.get(2));
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44084434/article/details/90734809