[Estructura de datos] que puede llevarlo al rey Parte 2: Lista vinculada de estructuras de datos 1

contenido

Prefacio:

1. ¿Qué es una lista enlazada?

1. El concepto de lista enlazada

2. La estructura de la lista enlazada

Cómo almacenan datos las listas vinculadas

3. Implementación de lista enlazada  

Método exhaustivo para crear una lista enlazada

imprimir lista enlazada

Averigüe si la clave de palabra clave está en la lista de enlaces únicos 

Obtenga la longitud de una lista enlazada individualmente:

 enchufe de cabeza

inserción de la cola

Insertar en cualquier posición, el primer nodo de datos es subíndice 0

Elimine el nodo cuya primera aparición de la palabra clave es clave

 eliminar todos los nodos cuyo valor sea clave

Resumir:

Estoy con usted.


Prólogo :

Problemas y pensamientos sobre la lista de secuencias

1. Inserción y eliminación en el medio/cabeza de la tabla de secuencia, la complejidad de tiempo es O(N)

2. Para aumentar la capacidad, debe solicitar un nuevo espacio, copiar datos y liberar espacio antiguo. Habrá algo de consumo.

3. La expansión de la capacidad es generalmente un aumento de 2 veces, y seguramente habrá una cierta cantidad de desperdicio de espacio. Por ejemplo, la capacidad actual es 100 y la capacidad aumenta a 200 cuando está llena. Continuamos insertando 5 datos y no se insertan datos más tarde, por lo que se desperdician 95 espacios de datos.

Pensando: ¿Cómo resolver los problemas anteriores? La estructura de la lista enlazada se muestra a continuación.

1. ¿Qué es una lista enlazada?

1. El concepto de lista enlazada

Una lista enlazada es una estructura de almacenamiento no contigua en una estructura de almacenamiento físico, y el orden lógico de los elementos de datos se realiza a través del orden de enlace de referencia en la lista enlazada.

2. La estructura de la lista enlazada

Hay 8 tipos de estructuras de listas enlazadas:

 

Aquí solo hablamos de los dos últimos, porque estas dos listas vinculadas se utilizan en el trabajo, los negocios, las preguntas del examen, las preguntas de la lista vinculada cepillada y las preguntas de la entrevista. 

Cómo almacenan datos las listas vinculadas

Una lista enlazada se compone de nodos. (Aquí tomamos una lista enlazada individualmente como ejemplo)

¿Qué es un nodo?

Los nodos se dividen en dos dominios, asumiendo que uno se llama dominio val y el otro se llama dominio siguiente.

valor: campo de datos

siguiente: la dirección del siguiente nodo

3. Implementación de lista enlazada  

//ListNode代表一个节点

class ListNode{
    public int val;
    public ListNode next;

    //构造方法
    public ListNode(int val){
        this.val = val;
    }
}
//MyLinkedList 代表这是一个链表

public class MyLinkedList {
    public ListNode head;//链表的头引用,所以定义在链表里,head是链表的头,不是节点的头,节点只有两个属性,一个属性是val值,一个属性是next值,所以不能定义在ListNode类里面
    ListNode listNode = new ListNode(2);//节点实例化,val域赋值为2
}

Método exhaustivo para crear una lista enlazada

/MyLinkedList 代表这是一个链表
public class MyLinkedList {
    public ListNode head;//链表的头引用,所以定义在链表里
    public  void createList(){
        ListNode listNode0 = new ListNode(11);
        ListNode listNode1 = new ListNode(26);
        ListNode listNode2 = new ListNode(23);
        ListNode listNode3 = new ListNode(45);
        ListNode listNode4 = new ListNode(56);
        listNode0.next = listNode1;
        listNode1.next = listNode2;
        listNode2.next = listNode3;
        listNode3.next = listNode4;
        this.head = listNode0;
    }

imprimir lista enlazada

//打印链表
    public  void display(){
         ListNode cur = this.head;
         while (cur != null){
             System.out.print(cur.val+" ");
             cur = cur.next;
         }
        System.out.println();
    }

 imprimir resultado:

Averigüe si la clave de palabra clave está en la lista de enlaces únicos 

 //查找是否包含关键字key是否在单链表当中
    public boolean contains(int key) {
        ListNode cur = this.head;
        while (cur != null) {
            if (cur.val == key) {
                return true;
            }
            cur = cur.next;
        }
        return false;
    }

imprimir resultado:

Obtenga la longitud de una lista enlazada individualmente:

    //得到单链表的长度
    public int size(){
        ListNode cur = this.head;
        int count = 0;
        while(cur != null){
            count++;
            cur = cur.next;
        }
        return count;
    }

 imprimir resultado:

 enchufe de cabeza

 //头插法

    public void addFirst(int data) {
        ListNode node = new ListNode(data);
        if (this.head == null) {
            this.head = node;
        } else {
            node.next = this.head;
            head = node;
        }
    }

imprimir resultado:

inserción de la cola

//尾插法

    public void addLast(int data){
        ListNode node = new ListNode(data);
        ListNode cur = this.head;
        if(this.head == null){
            this.head = node;
        }else {
            while(cur.next != null){
                cur = cur.next;
            }
            cur.next = node;

        }
    }

imprimir resultado:

Insertar en cualquier posición, el primer nodo de datos es subíndice 0

public ListNode findIndex(int index){
        ListNode cur = this.head;
        while(index -1 != 0){
            cur = cur.next;
            index--;
        }
        return cur;

    }
    //任意位置插入,第一个数据节点为0号下标
    public void addIndex(int index,int data){
        if(index < 0 || index > size()){
            System.out.println("位置不合法");
            return;
        }
            if(index == 0){
                addFirst(data);
                return;
            }
            if(index == size()){
                addLast(data);
                return;
            }

            ListNode cur = findIndex(index);
            ListNode node = new ListNode(data);
            node.next = cur.next;
            cur.next = node;

    }

imprimir resultado:

Elimine el nodo cuya primera aparición de la palabra clave es clave

//删除第一次出现关键字为key的节点
    public void remove(int key){
        if(this.head == null){
            System.out.println("没有你要删除的节");
            return;
        }
       if (this.head.val == key){
           this.head = this.head.next;
           return;
        }
       ListNode cur = this.head;
       while (cur.next != null){
           if(cur.next.val == key){
               cur.next = cur.next.next;
               return;
           }
           cur = cur.next;
       }
       if(cur.next == null){
           System.out.println("没有该节点");
           return;
       }

    }

 imprimir resultado:

 eliminar todos los nodos cuyo valor sea clave

    //删除所有值为key的节点
    public ListNode removeAllKey(int key){
        if(this.head == null) return null;
        ListNode prev = this.head;
        ListNode cur = this.head;
        while (cur != null){
            if(cur.val == key){
                prev.next = cur.next;
                cur = cur.next;
            }else{
                    prev = cur;
                    cur = cur.next;
            }
        }
        if(this.head.val == key){
            this.head = this.head.next;
        }
        return this.head;

    }

imprimir resultado:

Resumen :

Este artículo presenta brevemente la lista vinculada de estructuras de datos, cómo crear una lista vinculada y cómo operar los datos en la lista vinculada. Profundizar en la comprensión de la tabla de secuencias mediante ejemplos sencillos. Lo anterior es el contenido de hoy. Si tiene alguna pregunta, puede enviarme un mensaje privado en cualquier momento. Corregiré activamente cualquier problema en el artículo. También espero que todos puedan dominar el conocimiento que desean más rápido, ¡trabajemos juntos! ! ! ! !

estoy contigo._ _ _ _ _

Supongo que te gusta

Origin blog.csdn.net/m0_64397675/article/details/123401757
Recomendado
Clasificación