zoukankan      html  css  js  c++  java
  • 单链表

    序言

    链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针实现的。

    链表由一系列结点组成,结点可以在运行时动态生成,而且由于没有闲置的内存,因此空间效率比数组高。

    其插入操作可达到O(1)复杂度,但是查找或者访问特定的结点复杂度是O(n)。

    链表的实现可以是单向链表或者双向链表,LinkedList的底层就是双向链表,本文介绍单向链表的简单操作。

    Java指针

    https://zhuanlan.zhihu.com/p/131612029

    中的变量指向内存中的变量,这就是Java中的指针。

    Java自引用

    自引用是构造链表的基础,就是在类里定义一个指向自身的引用

    public class Node {
    
        public Object data;
        public Node next;//java的引用就是C语言的指针
    
        public Node(Object data)
        {
            this.data=data;
        }
    
        public static void main(String args[])
        {
            //两个Node
            Node node1=new Node("张三");
            Node node2=new Node("李四");
    
            //由于Java语言中没有指针,因此可以将每个结点包装成类,利用其中一个成员属性将一个一个单独的结点连接起来。
            node1.next=node2;
    
            System.out.println(node1.data);
            System.out.println(node1.next.data);
        }
    }

    Node

    由于Java语言中没有指针,因此可以将每个结点包装成类,利用其中一个成员属性将一个一个单独的结点连接起来。

    Java指针已经被抽象成了引用,引用可以看成是一个功能受限的指针(或者说被阉割的指针)

    对于数据结构,语言的选择不会影响它的表达,真正理解它的意义才更为重要。

    public class Node<T>                             //单链表结点类,T指定结点的元素类型
    {
        public T data;                               //数据域,存储数据元素
        public Node<T> next;                         //地址域,引用后继结点
    
        public Node(T data, Node<T> next)            //构造结点,data指定数据元素,next指定后继结点
        {
            this.data = data;                        //T对象引用赋值
            this.next = next;                        //Node<T>对象引用赋值
        }
        public Node()
        {
            this(null, null);
        }
        public String toString()                     //返回结点数据域的描述字符串
        {
            return this.data.toString();
        }
    }
    Node

    temp指针指向头结点headNode,此时temp指针等价于headNode。

    public Node<E> headNode;

    Node<E> temp = headNode;

    尾部插入

    头部插入

    中间插入

     

    尾部删除


    头部删除


    中间删除



    public String toString(){
             StringBuilder sb=new StringBuilder();
             if (headNode==null){
                 return  "无数据";
             }else {
                 Node<T> temp = headNode;
                 sb.append(temp.data+"
    ");
                 while(temp.next != null) {
                     sb.append(temp.next.data+"
    ");
                     temp = temp.next;//将指针移动到下一个结点
                 }
             }
            return  sb.toString();
        }
    toString

    资料

    https://www.jianshu.com/p/1d7bff328d67

  • 相关阅读:
    Selenium+Chrome或Firefox的动态爬虫程序
    scrapy管道MySQL简记
    Ajax数据获取(未完待续。。。)
    如何快速识别网页是静态、动态、还是伪静态的?
    python3>日期和时间
    简单实例
    爬虫【基础篇】
    数据库的分区、分表、分库、分片的简介
    bilibili弹幕爬取与比对分析
    前端日常开发---搭建脚手架
  • 原文地址:https://www.cnblogs.com/cnki/p/12113488.html
Copyright © 2011-2022 走看看