데이터 구조 - Lista Enlazada

Hola a todos, estar é haciendo una serie de post, donde les voy a hablar sobre las estructuras de datos como por Ejempo 체인 테이블, 창고와 대기열, 두 갈래 나무, 그림, 더미 y explicando algunas operaciones y ejercios.
Este es el primer post veremos 체인 테이블, conceptos fundamentales y algunas operaciones=).

개념 원리


체인 테이블의 하위 구조는datos lineales,donde sus elementos noest á n almacenados en bloques continuos de memoria,diferencea de los array,que estos son almacenados de bloques continuos de memoria,para entender mucho mejor vea la siguiente imagen이다.

Mientras que las Linked List son almacenadas en differentes sectores de la memoria y hace referencia a sus elementos mediantes punteros.

Que diferencia una 체인 테이블 de un 그룹

  • No tiene un tamaño fijo,si conoces otros lenguajes como Java o**C++sabrás que al momento de crear un array debes indicar el tamaño del mismo,pero si viene con un background solo de lenguajes dinámicos como Javascript o Python esto es totalumente transparent parausted.
  • Agregar elementos y remover de un array son operaciones costosas,ya que se debe crear un nuevo array y luego organizar los elementos o solo resorganizar los elementos si la operación fue remover,mientra que las Linked list es más fácil este proceso.
  • 빈타하스

  • 타마노 디나미코.
  • Fácil realizar procesos como agregar o remover.
  • 데스벤타하스

  • Acceso random no estápermitido,si usted quiere poder accepter a un elemento como lo hace con los array esto no es posible,usted debe iniciar desde el nodo root e iterar por cada uno de los elementos hasta encontar el valor que desea.
  • Se tiene un espacio de memoria extra para los punteros de cada uno de los elementos.
  • esamigable con la cache, en los array los elementos son almacenados en continuos bloques de memoria y elacceso de cada uno de ellos son obtenidos mediante un cá lculo matem áticoaddress calculation in an array가 없습니다.
  • Tipos de 체인 테이블

  • 간단한 체인 테이블(Lista Enlazada Simple).La navegación siempre es hacia adelante.
  • 이중 체인 테이블(Lista Enlazada Doble).La navegación puede ser hacia adelante o hacia atrás.
  • 루프 체인 테이블(Lista Enlazada 루프).En el primer elemento tiene un puntero que apunta al elemento final y elemento final apunta al primero.Esto se traduciría en un bucle infinite,también se puede combinar con las anteriores.

  • Uso de las 체인 테이블


    Les dejo los siguientes는para profundizar más sobre este aspecto에 연결됩니다.
  • https://www.geeksforgeeks.org/applications-of-linked-list-data-structure/
  • https://stackoverflow.com/questions/644167/what-is-a-practical-real-world-example-of-the-linked-list#:~:text=A%20linked%20list%20can%20be,the%20top%20of%20the%20stack.
  • Bueno creo que eso fue mucha información,espero no haberte abrumado o aburrido=).Ok veamos algo de código,los siguientes ejemplos serán implementados en Kotlin,usted puede llevar este ejempo al lenguaje de su preferencia.

    Ejempo de codigo(코트린)


    Primero crearemos una class Node el cual hara referencia a cada uno de los elementos en la link List.
    class Node (var value: String, var next: Node? = null)
    
    El siguiente paso es crear una clase que se encargue de gestiator las operaciones como agregar, remover 등.
    class MyLinkedList(var root: Node? = null) {
        fun add(value: String) {
            // nuevo nodo a crear
            val node = Node(value)
    
            // validar que el nodo padre no este vacio
            if (root == null) {
                root = node
                return
            }
    
            // agregar elemento al final de la lista
            var e = this.root
            while (e?.next != null) {
                e = e?.next
            }
    
            e?.next = node
        }
    
        fun unShift(value: String) {
            // agregar elemento al inicio
            // nuevo nodo a crear
            val node = Node(value)
    
            // agregar el nuevo nodo si el root esta vacio
            if (this.root == null) {
                this.root = node
            } else {
                // asignar el nuevo nodo como root
                node.next = this.root
                this.root = node
            }
        }
    
        fun remove(value: String): Boolean {
            // para remover un elemento siempre hay ubicarse
            // en elemento anterior
            var prev: Node? = null
            var current = this.root
    
            // eliminar el nodo root
            if (current?.value == value) {
                this.root = this.root?.next
                return true
            }
    
            // buscar el nodo con el valor a eliminar y mantener el nodo anterior
            while (current != null && current?.value != value) {
                prev = current
                current = current.next
            }
    
            // verificar si el nodo a eliminar existe
            if (current == null) return false
    
            prev?.next = current.next
    
            return true
        }
    
        fun printValues() {
            var e = this.root
            while (e != null) {
                println(e.value)
                e = e.next
            }
        }
    }
    
    fun main() {
        val myLinkedList = MyLinkedList()
        myLinkedList.add("Kotlin")
        myLinkedList.add("Javascript")
        myLinkedList.add("Python")
        myLinkedList.unShift("Java")
        myLinkedList.remove("Javascript")
    
        myLinkedList.printValues()
    }
    
    Estos son ejemplos sencillos para poder가 링크 목록을 설명합니다.Existe operaciones más avanzadas que podemos realizar y podemos defundizar en otro post.Si estáinterestado en defoundizar más,vea el final de post para consultar los recursos.
    Si quiere usar una Linked List en Kotlin no es necesario crearla usted mismo,puede usar la clase nativa de Java.
    import java.util.*
    
    fun main() {
        val linkedList = LinkedList<String>()
        linkedList.add("Kotlin")
        linkedList.add("Java")
    
    
        val iterator: Iterator<String> = linkedList.iterator()
        while (iterator.hasNext()) {
            println(iterator.next())
        }
    }
    
    Mis Recommendaciones para poder entender más las estrustructuras de datos es practicar,intentent buscar ejercicios en páginas comoHackerrank,Leetcode.comoGeeksforgeeksdonde puede consultar ejempos y resolver ejercicios references a cada sección.Existe muchas páginas de este estilo no importa cual use lo important es practicar.
    Espero que les halla gustado este post,si tiene alguna sugerencia o corrección no dude es escribirme=).

    차례로 돌아가다

  • https://www.geeksforgeeks.org/data-structures/linked-list/

  • 좋은 웹페이지 즐겨찾기