¿Qué es una lista vinculada en las estructuras de datos de programación?

Es muy fácil para alguien que tiene una comprensión fundamental de las computadoras responder esta pregunta, pero la mayoría de las personas la responden de una manera que otras personas con una comprensión fundamental de la computadora entienden.

Contestaré esta pregunta abordando los fundamentos primero, porque lo estoy dirigiendo al laico. Se alargará mucho. Con suerte, será útil y le dará una mayor apreciación de la programación.

¿Qué es un programa de computadora? Un programa de computadora es un conjunto de instrucciones escritas en lenguaje de máquina que le indican a la CPU de la computadora qué hacer. Como tal, una CPU es un dispositivo bastante rudimentario pero potente. Es un chip con un montón de circuitos lógicos integrados. Puede almacenar algunos datos dentro del chip en circuitos llamados registros, puede modificar esos registros y realizar ciertas operaciones. También tiene pines por los que se comunica con el mundo exterior. En lo que respecta a la CPU, el mundo entero existe al final de sus pines. Es como una araña ciega, sintiendo el estado del universo a través de las vibraciones en su red. Los pines son pines de entrada (los datos entran a través de los pines de entrada), pines de salida (los datos salen a través de los pines) y pines de control (las instrucciones entran a través de estos pines). Los pines de control son realmente especiales. Proporcionar combinaciones de 1s y 0s a los pines de control activa diferentes circuitos en el chip. Una combinación hace que agregue 2 registros. Otro lo hace restarlos. Otra combinación le dice que obtenga datos de sus pines de entrada. Otro más le dice que envíe datos a sus pines de salida. Estas combinaciones de 1s y 0s en los pines de control, llamados códigos de operación (abreviatura de códigos de operación), son los hilos que hacen bailar al títere.
Ahora, un programa de computadora no es más que una serie de códigos de operación. Los alimentas a la CPU en el orden correcto, y la CPU baila a tu ritmo. Cada computadora en el mundo está compuesta de

a) una CPU,
b) un mecanismo por el cual los códigos de operación se introducen en la CPU,
c) un mecanismo por el cual la CPU puede almacenar información mientras no tiene los datos en sus registros
d) un mecanismo por el cual la computadora puede hablar con otras computadoras y
e) un par de mecanismos por los cuales un operador humano puede suministrar información a la computadora y obtener información de la computadora

No importa si es su PC, su teléfono inteligente o una computadora de los años 70 del tamaño de una casa. Todas las computadoras, fundamentalmente, tienen estas 5 partes de una manera u otra, y el programa de computadora es lo que hace que todas estas funcionen juntas

¿Qué es una estructura de datos?

Entonces, todo eso está muy bien, y entendemos lo que puede hacer una CPU, pero no hemos abordado lo que una CPU no puede hacer. La CPU, por sí sola, es la araña ciega. La araña ciega siente que es telaraña y comprende lo que está sucediendo. Pero no tiene idea de si la web está en un árbol o en un edificio de gran altura. No sabe si está en una choza de indigentes o en la oficina del presidente. La CPU entiende que hay estos periféricos conectados a ella. No tiene idea de qué problema resuelven estos periféricos. Sabe que hay algunos periféricos conectados a sus pines de salida en la dirección 0x3000. No sabe que es un monitor. El monitor podría estar mostrando fotos familiares, o pornografía, o la imagen de Cristo, o una mujer siendo violada. No tiene idea! Todo lo que sabe es que está enviando algunos datos a esa dirección.

Pero a los operadores humanos se les dice que usen computadoras para resolver problemas humanos. Todo lo que hace la computadora es en el contexto de algo más grande que la computadora no tiene la capacidad de entender. ¿Puede una araña ciega volar un avión? u operar un dispositivo médico? ¿O ayudarlo a mantenerse en contacto con un ser querido a 3000 millas de distancia? Este es el trabajo principal y el desafío fundamental de cualquier programador. Tome una solución ideada por un humano a un problema humano y conviértala en una serie de códigos de operación que cuando se alimentan a la computadora resuelven ese problema

¿Cómo hacen eso los programadores? Crean abstracciones … muchas y muchas abstracciones. Las abstracciones son como su nombre sugiere representaciones abstractas de las cosas. Actúan como un puente entre cómo piensan los humanos y cómo operan las computadoras. Las abstracciones permiten a los programadores expresar lo que hace un programa de computadora sin tener que recordar la serie de códigos de operación. Esto los hace más fáciles de entender y comunicar.
Inicialmente comenzaron con abstracciones de nivel inferior. Las abstracciones de nivel inferior están más cerca de cómo funcionan las computadoras, abstracciones que podrían traducirse fácilmente en código de computadora. Finalmente llegaron a un acuerdo sobre un conjunto estándar de abstracciones. Luego construyeron compiladores que tomaron un programa escrito en un lenguaje que se refiere a las abstracciones que generan códigos de operación. Esto les permitió construir abstracciones sobre las abstracciones que hicieron que esas abstracciones se acercaran más a cómo piensan los humanos. Ahora, en los últimos 60 años, son abstracciones sobre abstracciones. Son arañas ciegas hasta el fondo. La mayoría de los programadores novatos hoy en día ni siquiera entienden lo que hace la CPU bajo el capó. No necesitan hacerlo porque alguien más lo ha cuidado y les ha dado una abstracción

Una estructura de datos es una abstracción de muy bajo nivel . Es por eso que es más difícil de explicar pero fácil de entender para las personas que entienden cómo funcionan las computadoras. Es una de las primeras cosas que te enseñan en la universidad, y también lo primero que te hace tropezar, porque es la primera vez que te enfrentas a la abstracción. De repente pasas de aprender “así es como una CPU transfiere datos” a “aquí hay algo de lo que nunca has oído hablar en tu vida y no puedes relacionarte, pero de todos modos debes entenderlo”

Las estructuras de datos son herramientas abstractas que describen cómo se pueden organizar los datos. Recuerde, la CPU no tiene idea de qué necesidad humana está tratando de satisfacer. Este dato que intenta mantener podría ser cualquier cosa. Podría ser una lista de compras, o podría ser la tabla de contenido de un libro. No tiene idea! La forma de organizar una lista de compras es fundamentalmente diferente de cómo organizar una tabla de contenido. Entonces, con el tiempo, los programadores han acordado varias formas estándar de organizar la información y les han dado nombres estándar, y todas estas descripciones abstractas de cómo deben organizarse los datos se denominan estructuras de datos.

¿Qué es una lista? Una lista está bien … lista. Todos tienen listas. Tiene listas de tareas, listas de compras y listas de deseos. De hecho, sería bastante apático sin listas. Los humanos tienen una noción muy difusa de las listas. Sin embargo, los programadores tienen una noción muy precisa pero abstracta de las listas. Una lista es

a) una estructura de datos que contiene otros datos de piezas múltiples. No importa qué datos contenga. Podrían ser monedas de oro o canicas para niños. No importa Una lista es una cosa abstracta. Simplemente describe cómo se guardan los datos. No es lo que se lleva a cabo. Podrías sostener cualquier cosa. Podrías tomar todo el té en China si tienes una lista
b) puede contener el mismo dato varias veces sin quejarse. Puede agregar plátanos, naranjas y luego plátanos nuevamente. No hay problema. No haces eso con una lista de compras. En una lista de compras. Un elemento puede aparecer solo una vez. Eso no es una lista. Eso es un conjunto. Cuando los programadores crean abstracciones, se inspiran en sus contrapartes de la vida real, pero eso no significa que la abstracción tenga que adherirse a la contraparte de la vida real. Para que una abstracción sea útil, tiene que ser precisa y no importa si es fiel a la parte exterior de la vida real. Entonces, una lista de compras es un Conjunto, y todos están de acuerdo con ella siempre y cuando todos tengan un entendimiento común
c) Se ordena una lista. Pones algo en una lista, se queda ahí, justo donde lo pones. No es como mi esposa que sigue “organizando” mi escritorio para mí. No Cuando coloca los datos en una lista, es antes de algún otro dato, y después de otro dato, y no importa cuántas veces lo mire, el orden no cambia. Además, las cosas no pueden estar una al lado de la otra o una encima de la otra o tener relaciones sexuales entre ellas. No Todo es antes o después de otra cosa, y no se tocan. Es como un tren, pero no se llama Tren porque lo dijimos
d) Una lista le permite repasar todos los elementos que contiene uno por uno en el orden en que se colocó. Esto se llama iterar. Le permite ir al elemento que se encuentra en la enésima posición. Le permite insertar algo en el medio o al principio o al final, le permite eliminar un elemento

Ahora, como puede ver, esta es una noción muy precisa pero muy abstracta. Y de esto se trata la programación. Una lista es una herramienta. Entiende la herramienta y aprende otras herramientas que funcionan con estas herramientas. Luego observa una solución ideada por un problema humano a humano y descubre cómo resolverá ese problema utilizando estas herramientas. Una vez que haya resuelto el problema que alguien más ha resuelto utilizando este conjunto específico de herramientas, convertir la solución a un programa de computadora es un trabajo duro. En cierto modo, no es diferente a ser fontanero o carpintero. Aprendes cómo usar las herramientas y cuándo usarlas y luego las aplicas … excepto que todas nuestras herramientas son producto de la imaginación, y tenemos que mantener estos objetos en nuestras cabezas para hacerlos realidad. Es por eso que hacemos mucho dinero, y usted no: p

¿Qué es una lista vinculada?

Una lista vinculada es una forma específica de hacer una lista.

Una manera fácil de hacer una lista es mantener las cosas una al lado de la otra en la memoria. Entonces, supongamos que su lista contiene thingamajigs, y cada thingamajig tiene exactamente 20 bytes. Entonces, los bytes 2001-2020 contienen la cosa 1, y 2021-2040 contienen la cosa 2, y así sucesivamente. Esto se llama ArrayList, porque es una lista hecha usando una matriz (que es lo que los programadores de computadoras llaman todo lo que se hace al poner las cosas una al lado de la otra) Es muy fácil iterar sobre esto y obtener el enésimo elemento. Si sabe dónde comienza la lista, sabe dónde comienza cada elemento de la lista haciendo un cálculo simple. No es cada uno insertar cosas intermedias en una ArrayList. Porque, si quieres poner un elemento en la posición N., eso significa que cada elemento desde N + 1 hasta el final tiene que cambiar un lugar … y si tienes elementos grandes, entonces sus gordos traseros no se mueven fácilmente. Piense en una ArrayList como la cola en el DMV donde le dan el número. Una vez que tienes un número, lo tienes. Es muy difícil para el DMV agregar a alguien en el medio. ¡Tendrán que ir y cambiar los números de todos!

Una lista vinculada resuelve este problema mediante la vinculación. En una lista vinculada, cada elemento de la lista sabe que el siguiente elemento de la lista es No todos tienen que sentarse uno al lado del otro. Entonces, cuando estás iterando sobre la lista, ¿solo necesitas saber quién es el primero? Digamos que Suzy es primero. Trabajas en Suzy y le preguntas “¿Quién es la próxima?” Suzy dice que Amy es la próxima. ¿Trabajas en Amy y le preguntas quién es el próximo? Amy dice que Lara es la siguiente … y así sucesivamente. Facilita eliminar o agregar a alguien. Digamos que querías que Christie estuviera entre Amy y Lara. Le dices a Amy “Ok Christie es la próxima, no te preocupes por Lara” y le dices a Christie: “Lara es la próxima”. Es mucho más difícil ir al enésimo elemento de la lista. porque tendrás que ir a cada persona y preguntar quién es el siguiente. Esto se denomina lista vinculada porque cada elemento tiene un enlace al siguiente elemento de la lista. Si cada elemento tenía un enlace tanto al anterior como al siguiente, entonces se llama Lista Doblemente Vinculada … porque está vinculado de 2 maneras. Sí, cuando hacemos nuestras abstracciones, tomamos prestadas palabras del inglés del siglo XIV, o algunas veces inventamos nuestras propias palabras. Por eso hacemos mucho dinero. Se llama ser muy creativo.

Como puede ver, una lista vinculada es bastante buena cuando revisa principalmente los datos en orden (iterando) o agregando y eliminando elementos intermedios. Pero, es horrible si quieres encontrar cosas.


Lo que es más interesante que una lista vinculada es que su primo más joven pero más inteligente se llama Skip List. No, una Lista de saltos no es una lista que salta al trabajo. Una lista de omisión es una lista que le permite omitir partes de ella. La mayoría de los motores de búsqueda usan listas de omisión.

Digamos que usted es Google y desea indexar todo Internet y facilitar la búsqueda de cualquier persona mediante cualquier término. Entonces, alguien podría acercarse a usted y decirle que busque “bollos picantes” y desea darles todas las páginas web que mencionan los bollos picantes. Entonces, lo primero que debe hacer es buscar todas las páginas web del mundo y averiguar qué términos contienen. Digamos que tiene un millón de páginas (en realidad tenemos más de 4 mil millones de páginas web … pero no nos volvamos locos), de las cuales 250,000 dicen hot, 80,000 dicen bollos. No sabe cómo decir amy hot and bollos, y su trabajo es resolverlo en una centésima de segundo. ¿Cómo resolverás este problema humano?

Una forma de hacerlo es. asigne a cada página web un número único. Luego, para cada término posible, cree una lista vinculada. Todas estas listas están siempre en el mismo orden, incluso si les faltan elementos. Usando estas listas, usted sabe que la primera página web que tiene palabras calientes es la página web número 43, y la siguiente es la página web # 755, luego la # 759 y así sucesivamente. Entonces, ¿cómo encuentras una página web que tenga bollos AND calientes? Comprueba esas listas una contra la otra. Verá el primer documento que tiene hot # 43 y el primero que tiene bollos (# 22). Si son iguales, encontró una página web que dice hot y bollos. Si no son lo mismo … entonces vas al siguiente en el que está detrás hasta que se adelanta al siguiente o encuentras una coincidencia. Si uno se adelanta al otro, avanza el que está detrás. Sigue haciendo esto hasta que termines ambas listas

Pero hay un problema aquí. Digamos que el hot estuvo en el # 43 y luego el # 755 y los bollos en todas las páginas web desde el # 44 al # 754. Ahora, si estaba verificando estas listas entre sí utilizando una lista vinculada, deberá iterar sobre los bollos 710 veces. Ahora, puedes ser un hombre de bollos, pero lidiar con 710 bollos fríos puede ser tedioso. Ya sabes que no quieres bollos en los documentos antes del # 755, ¿no puedes simplemente saltarte ? Bueno, por eso tienes una lista de saltos. En una lista de omisión, ot solo cada elemento sabe qué elemento está detrás de él, sabe qué elemento está 10 elementos detrás de él, y 100 elementos detrás de él, y 1000 elementos detrás de él, y así sucesivamente. Entonces, cuando el programa vea que necesita pasar del # 43 al # 755, avanzará en 100 segundos, en lugar de moverse uno por uno

¿No es asombroso? Un tipo llamado William Pugh inventó las listas de salto. Aquí está él

No, no estoy bromeando. Ese es literalmente el tipo que inventó las listas de omisión. Se doctoró en Cornell y ahora es profesor en la Universidad de Maryland. Pasó un año en Google y aprendió a comer fuego. Aquí está su tesis sobre las listas de omisión. http://citeseerx.ist.psu.edu/vie…

Echemos algunas ilustraciones aquí para aquellos que no están bien versados ​​en informática.

Cuando necesita almacenar cosas en la memoria de una computadora, debe usar algo llamado matrices, que son cubos de almacenamiento preasignados, como pequeños contenedores físicos.

Piense en esto como una matriz de 2 por 6 para almacenar datos del tipo “huevo”, si lo desea. ¿Pero qué pasa si tienes 13 huevos? o 759? o tu aplicación se volvió viral y tienes huevos de todos en Internet?

Claramente, en algunos casos, no puede depender de saber cuántos artículos necesitará almacenar, por lo que necesita otra forma de hacerlo.

Ingrese la lista vinculada.

Ahora, imaginemos que creamos un elemento de almacenamiento que tiene dos componentes: un cubo para almacenar su “huevo” y una cadena que se une al siguiente cubo.

Entonces, cuando desea almacenar un nuevo “huevo”, asigna una nueva unidad de almacenamiento, coloca su “huevo” en él y luego lo conecta a la cadena de cubos que ya tiene.

En términos de computadora, lo hace más típicamente usando la dirección de la porción de memoria que asignó, y recuerda la dirección del primer depósito de la cadena, o el último, y pega su nuevo depósito como el nuevo primero, señalando el primero anterior, o pegándolo al final como el último último cubo, y recuerde dónde está para poder repetirlo cuando asigne un nuevo cubo.

Tenga en cuenta que encontrar un huevo en particular puede ser un desafío; potencialmente tienes que caminar por toda la cadena de cubos buscando el huevo en cuestión.

Tenga en cuenta también que eliminar un depósito también tiene su propio conjunto de problemas: debe encontrar el que desea eliminar y luego señalar el que está delante de él al que está detrás de él antes de eliminarlo.

Dependiendo de su caso de uso, puede optar por usar otras estructuras de datos, como una lista doblemente vinculada (cada segmento apunta al que está delante y detrás de él) o una estructura de árbol donde hay una jerarquía que sube -down versus linealmente.

Una lista vinculada es cómo se implementa una Lista en muchos lenguajes de programación. Una lista es lógicamente un conjunto de elementos con un orden específico.

Los “enlaces” en la lista describen cómo las entradas en la lista se conectan entre sí.

En C, puede crear una lista usando algo como esto:

typedef struct MyList {
int elem_value;
struct MyList * next;
} Mi lista;

Esta estructura de datos le permitiría crear una lista simple de enteros. Tenga en cuenta que puede tener elementos con el mismo elem_value, pero en realidad son elementos diferentes en la lista.

En lo anterior, el puntero “siguiente” es necesario para describir el “vínculo” entre los elementos de la lista. Una lista generalmente tendrá un elemento “head”, y la terminación se indicará al establecer el puntero “next” en NULL, “nil” o algún otro valor similar.

Recorrerías la lista haciendo algo como esto:

vacío
print_list (lista MyList *)
{
MyList * caminar;
int i;

for (i = 0, walk = list; walk! = NULL; walk = walk-> next, i ++) {
printf (“elemento de lista% d es% d \ n”, i, walk-> elem_value);
}
}

Las listas son útiles porque son estructuras fundamentalmente dinámicas que pueden crecer “sin límite” (dentro de los límites de la RAM disponible). En este sentido, son más útiles que las matrices en muchos idiomas, ya que generalmente debe saber qué tan grande será una matriz antes de completarla, mientras que las listas pueden ser dinámicas “verdaderamente”.

Como puede ver con print_list arriba, recorrer una lista es una operación O (), y encontrar el i-ésimo elemento en la lista requiere caminar elementos “i”.

Las listas se pueden usar para crear fácilmente muchas estructuras de datos derivadas, como Colas, Pilas y FIFO. Una lista es el tipo más simple de estructura de datos de árbol.

Al revés de las listas:

  • Son dinámicos.
  • Son más fáciles de “editar” que las matrices, ya que puede agregar y eliminar elementos al principio de una lista, al medio de una lista o al final de una lista fácilmente sin molestar mucho a los otros elementos de la lista. Agregar a una lista y eliminar de una lista (una vez que sepa dónde está colocando el elemento) es una operación O (1), frente a O (N) como lo es con las matrices.
  • Las listas se pueden “dividir” y manipular de otra manera fácilmente, sin necesidad de hacer copias completas de ellas.

Desventajas de las listas:

  • Acceder al i-ésimo elemento de una lista es la operación O (N), no una operación O (1) como lo es con las matrices.
  • Como estructuras de datos dinámicas, las listas deben asignarse y liberarse cuidadosamente.

Linked List es una estructura de datos lineal y es una estructura de datos muy común que consiste en un grupo de nodos en una secuencia que se divide en dos partes. Cada nodo consta de sus propios datos y la dirección del siguiente nodo y forma una cadena. Las listas enlazadas se utilizan para crear árboles y gráficos.

Ventajas:

  • Son de naturaleza dinámica que asigna la memoria cuando es necesario.
  • Las operaciones de inserción y eliminación se pueden implementar fácilmente.
  • Las pilas y las colas se pueden ejecutar fácilmente.
  • Lista enlazada reduce el tiempo de acceso.

Desventajas

  • La memoria se desperdicia ya que los punteros requieren memoria adicional para el almacenamiento.
  • No se puede acceder a ningún elemento al azar; Tiene que acceder a cada nodo secuencialmente.
  • El recorrido inverso es difícil en la lista vinculada.

Tipos:

Lista enlazada individual: las listas enlazadas individualmente contienen nodos que tienen una parte de datos y una parte de dirección, es decir, la siguiente, que apunta al siguiente nodo en secuencia de nodos. Las operaciones que podemos realizar en listas enlazadas individualmente son inserción, eliminación y recorrido.

Lista doblemente vinculada : una lista doblemente vinculada es una lista que tiene dos referencias, una al siguiente nodo y otra al nodo anterior.

Lista enlazada circular: en la lista enlazada circular, el último nodo de la lista contiene la dirección del primer nodo y forma una cadena circular.

Aplicaciones de listas enlazadas

  • Las listas vinculadas se utilizan para implementar pilas, colas, gráficos, etc.
  • Las listas vinculadas le permiten insertar elementos al principio y al final de la lista.
  • En las listas enlazadas no necesitamos saber el tamaño de antemano.

Del mismo modo que una matriz es la colección de ubicaciones de memoria continua de cualquier tipo determinado, como int, float, char o incluso un puntero.

Por ej. En lenguaje C ++, declaramos una matriz como la siguiente

sintaxis: identificador de tipo [tamaño];

int arr [5];

Aquí, arr es la matriz de tipo entero y tamaño 5. Se almacenará en las ubicaciones de memoria continua. Se utiliza principalmente cuando conocemos el tamaño de antemano. Podemos recuperar un elemento de la matriz con solo mencionar la posición del elemento entre corchetes, es decir, el subíndice.

Del mismo modo, la lista vinculada es la colección de nodos. El nodo tiene 2 partes:

  1. Elemento que debe ser almacenado
  2. Puntero al siguiente nodo (dirección del siguiente nodo)

Los nodos no se almacenan en ubicaciones de memoria continua a diferencia de la matriz, pero se almacenan en cualquier lugar de la memoria donde esté disponible el espacio. Entonces, para vincular un nodo al otro, tenemos la parte del puntero del nodo que apunta o contiene la dirección del siguiente nodo. De esta manera podemos recuperar los elementos de la lista vinculada secuencialmente. La parte del puntero del nodo generalmente se denota como la siguiente como se muestra en el diagrama, ya que apunta al siguiente nodo. El último nodo de la lista vinculada siempre tiene NULL en su parte de puntero, ya que apunta a nada y es el final de la lista vinculada. También podemos agregar o eliminar enlaces a / de la lista de enlaces y también hacer que un nodo apunte a otro nodo.

Podemos tener múltiples operaciones en la matriz, así como en una lista vinculada, como la recuperación de elementos, inserción, eliminación, etc.

La lista enlazada tiene múltiples ventajas, como el desperdicio de memoria, pero en el mismo lado, también tiene desventajas como colgar referencias y basura.

Buena suerte ! 🙂

Consulte los enlaces a continuación para obtener detalles completos sobre las listas vinculadas,

Lista vinculada en C

https://www.log2base2.com/data-s

insertar un nodo al final de una lista vinculada

buscando un nodo en una lista individualmente vinculada

https://www.log2base2.com/data-s

¡Gracias!

Voy a dar una respuesta completamente no técnica, con el objetivo de contribuir a la “programación para tontos”. Yo también soy un tonto y tengo programación autodidacta y autodidacta. ¡Espero poder entenderlo!

¿Alguna vez has jugado Treasure Hunt (juego) – Wikipedia? Digamos que le pido que construya una oración, y cada palabra en la oración se almacena en una ubicación diferente. Cuando encuentre una palabra en particular, también encontrará una pista sobre dónde encontrar la siguiente palabra. El juego comienza cuando te entrego la primera pista (o la pista principal).

  1. Primera pista: ve, busca en tu habitación, debajo de la cama.
  2. Vas al dormitorio, miras debajo de la cama y descubres la primera palabra escrita en un papel. Esta palabra es “tesoro”. Detrás del papel, en letra minúscula, se encuentra la siguiente pista: ve y mira debajo del sofá de tu sala de estar.
  3. Ve, mira debajo del sofá de tu sala de estar y encuentra la siguiente palabra en otro papel. Esta palabra es “caza”. Detrás del papel, en letra minúscula, se encuentra la siguiente pista: ve y mira debajo de tu tocador.
  4. Ve y mira debajo del tocador, y encuentra la siguiente palabra en otro papel. Esta palabra es “es”. Detrás del papel, en letra minúscula, se encuentra la siguiente pista: ve y mira el asiento de tu auto.
  5. Vas al auto y miras en el asiento de tu auto, encuentras otra palabra en otro papel. Esta palabra es “diversión”. Miras detrás del periódico y no hay una pista más. Esto implica que ya terminaste, y tu oración es “La búsqueda del tesoro es divertida”.

Esto es esencialmente lo que es una lista vinculada. Almacena una pieza de información (una palabra en el ejemplo anterior) y junto con ella, también almacena la dirección de la siguiente información. La última información no tendrá una dirección asociada. La dirección de la primera información es suficiente para ir y recolectar toda la información y, por lo tanto, la dirección de la primera información se conoce como “cabeza” (debajo de la cama, en el ejemplo anterior).

En una matriz típica, es fácil agregar una información al final de la matriz. En una lista vinculada, para agregar información al final, debe revisar todas las pistas. Llegas al último trozo de papel (que originalmente no tenía la siguiente pista) y agregas una nueva dirección para el siguiente trozo de información. Este recorrido a través de todas las piezas hace que agregar información al final sea muy ineficiente para las listas vinculadas.

Por otro lado, es muy fácil agregar algo al principio. Digamos que creo una nueva palabra “Jugar” y coloco esta palabra detrás de mi televisor. Mi pista principal ahora se modificará a: “Mira detrás del televisor”. Allí, colocaré un papel con la palabra “Jugar”, y detrás de esa palabra, escribiré la dirección de la siguiente pista que era la pista original, es decir, “Ve, busca en tu habitación, debajo de la cama . ”

(Otra diferencia importante entre una matriz y una lista vinculada está relacionada con el almacenamiento de memoria contigua. Una matriz es una pieza contigua de memoria dentro del almacenamiento de la computadora. Sin embargo, una lista vinculada no lo es; cada pieza de información puede almacenarse en múltiples ubicaciones disjuntas )

Ahora, con la nueva pista de “Mira detrás del televisor”, puedo revisar todos los elementos y construir una nueva oración “¡Jugar a Treasure Hunt is Fun!”

Una “lista vinculada” es una estructura de datos capaz de almacenar una colección ordenada arbitrariamente grande de artículos con un mínimo de sobrecarga. Cada elemento de datos está representado por una tupla que consiste en el elemento mismo y un puntero (un valor almacenado que se puede usar para encontrar la próxima tupla) a la siguiente tupla de la colección. Un puntero vacío indica que el elemento actual es el último elemento de la colección. La colección en sí suele estar representada por un puntero a la primera tupla; hecho de esta manera, un puntero vacío representa una colección vacía.

Las listas enlazadas son muy simples: solo requieren agregar un campo a una estructura de datos (el siguiente puntero). Debido a esto, las listas vinculadas suelen ser la segunda estructura de datos para almacenar colecciones que encontrará un programador principiante, siendo la primera una “matriz” de longitud fija. La mayoría de las operaciones en las listas vinculadas son lentas: mientras que agregar un elemento al encabezado de la lista y eliminar un elemento de la lista es rápido, cuenta el número de elementos en la lista, encuentra un elemento específico en la lista y agrega o elimina elementos. desde el final de la lista son todos lentos, en relación con otras estructuras de datos para almacenar colecciones y, por lo tanto, las listas vinculadas a menudo no son una buena opción, en términos de rendimiento, como una estructura de datos de “propósito general”.

Muchos idiomas tienen listas vinculadas, o al menos listas que se comportan como listas vinculadas, como un tipo de datos intrínsecos. Por ejemplo, en LISP y en prácticamente todos los idiomas derivados de LISP (de los cuales hay cientos, si no miles), las listas vinculadas son uno de los tipos de datos fundamentales en el lenguaje.

Hola,

Una lista vinculada es una estructura de datos lineal dinámica, donde cada elemento de datos es un objeto separado con su propia asignación de memoria conectada a los otros objetos mediante punteros.
Estos elementos (llamados nodos) forman parte de los datos y la referencia que apunta al siguiente nodo. El primer nodo se llama cabeza y el último nodo tiene una referencia nula. El número de nodos que componen la lista no es fijo y se puede cambiar a pedido.

Siéntase libre de echar un vistazo a mi publicación de blog completa sobre el tema: Lista vinculada | Por qué aprendemos esta estructura de datos – Blog (@xnorcode)

Saludos,

Andreas

Imagine que quiere mantener conectada su creciente colección de libros. Algunos de los libros en el estante no son tuyos. Entonces encuentra un lugar libre en su primer libro [digamos la última página] y escribe el ISBN del libro # 2. Repita con el libro N y ISBN N + 1 hasta que se quede sin libros.

Insertar es bastante simple. Tome un nuevo libro y agregue el ISBN del libro anterior # 1. Siempre querrá almacenar el ISBN del primer libro en algún lugar especial para que sepa dónde comienza la lista.

La búsqueda es algo lenta. En el caso de los libros N, obtendrá un promedio de N / 2 búsquedas a partir del libro n. ° 1 y finalmente llegará al libro sin el siguiente ISBN.

Eliminar un libro antiguo significa que debe volver a escribir el ISBN en el libro anterior con el ISBN del libro después.

Si alguien escribe el ISBN de un libro anterior por error, ahora tiene un bucle que “colgará” cualquier recorrido ingenuo de la lista de libros.

Para una pequeña cantidad de libros esto no es tan malo. Para alguien con una gran biblioteca, esta estructura de datos mostrará sus limitaciones de escala.

Lea esta publicación: Estructuras de datos para la codificación de entrevistas: informática en inglés simple | Pastel de entrevista

Sin duda, el desglose mejor y más fácil de entender de las estructuras de datos fundamentales, incluidas las listas vinculadas.

Hola, este tutorial puede ayudarlo a comprender las listas vinculadas: Lista ordenada [vinculada] autoorganizada en C ++ – Vardan Grigoryan (vardanator) – Medio

La lista vinculada es básicamente un grupo de estructuras. Cada elemento de estructura se divide en un nodo y una parte vinculada. El nodo contiene los datos que incluyen variables de diferentes tipos de datos y la parte de enlace es un puntero de estructura que apunta al otro nodo.

por ex

nodo de estructura

{
datos int;

estructura nodo * enlace;

}

Voy a responder su pregunta exacta primero y luego voy a responder una pregunta un poco diferente “¿Qué es una lista en las estructuras de datos de programación”? En primer lugar, si va a admitir eliminaciones y adiciones, elegirá una lista doblemente vinculada sobre una lista individualmente vinculada. La clase completa para una lista de doble enlace en C # se muestra en el siguiente enlace Cálculo – Lista. Sin embargo, este tipo de clase ahora está desactualizado. Ahora es la norma que una lista tenga acceso directo usando un indexador, como una matriz. La clase .Net integrada en la clase admite la indexación. Originalmente, Calculus tenía una clase List, que en última instancia era un Diccionario. Sin embargo, la clase List también tenía todas las características de una matriz, por lo que List cambió su nombre a Array. Es decir, List desapareció por completo a favor de las matrices dinámicas. Las matrices siguen siendo como diccionarios (es decir, Array es como Dictionary ). La matriz en su nuevo formato se puede convertir en una base de datos.

La diferencia entre un Array y un Dictionary es que los arrays tienen la noción de la entrada ‘siguiente’ (solo agregue uno al índice). Esto da lugar al método Agregar, que se agrega al final de la matriz. Esta es fundamentalmente la razón por la cual las matrices dinámicas se pueden usar para reemplazar listas (porque normalmente se agrega al final de una lista). Para ver ejemplos de listas / matrices, consulte Cálculo – Guía – Matrices.

Linked List es una de las formas eficientes de almacenar datos, la estructura de datos significa cómo se pueden almacenar los datos para que sea fácil de buscar y operar. Entonces, la lista vinculada es una de las formas de hacerlo en la estructura de datos.

Fuente: Introducción a la lista vinculada

Linked List es una estructura de datos lineal y es una estructura de datos muy común que consiste en un grupo de nodos en una secuencia que se divide en dos partes. Cada nodo consta de sus propios datos y la dirección del siguiente nodo y forma una cadena. Las listas enlazadas se utilizan para crear árboles y gráficos.

Primero usamos la matriz, pero en el caso de la matriz tenemos que definir el tamaño en el momento de la declaración o podemos tocar la matriz dinámica, pero luego la lista de enlaces está allí, hacemos un nodo y luego adjuntamos otro al que le dimos la dirección del nodo anterior. este nodo usando este punto o podemos acceder a todos los nodos de una lista vinculada. En esto solo necesitamos la dirección de un nodo si es una lista enlazada única, entonces queremos el primer nodo si podemos acceder doblemente a anterior y siguiente. En la lista vinculada no nos quedaremos sin espacio como si cada vez que quisiéramos agregar creáramos un nodo y lo adjuntamos a la lista vinculada que es la principal característica poderosa de una lista vinculada. Espero que lo entiendas bien. Avíseme si tiene alguna otra duda con respecto a la lista vinculada.

Una lista vinculada es muy parecida, una lista de cosas que están vinculadas entre sí. Sé que no suena útil, pero lo es.

Me gusta pensar en ellos como un collar de perlas. Tome un collar de perlas y desabroche el broche para que se pueda colocar en una línea. Ahora agarra el broche con tus dedos. El cierre es donde comienza la lista y la cadena es cómo se pasa de un elemento al siguiente. No puedes saltarte, solo puedes pasar de uno a otro.

En términos más informáticos, el cierre es una referencia al encabezado de la lista. Cada perla son los datos contenidos en cada nodo. Y cada bit de cadena es la referencia al siguiente nodo. Es importante comprender que no hay forma de encontrar un nodo en particular sin recorrer la lista. No hay referencia directa a ellos. Si pierde la referencia principal, ha perdido toda la lista.

Una lista vinculada es cuando tiene una lista de elementos de datos y almacena cada uno de ellos por separado, pero cada uno con una referencia al siguiente elemento.

Entonces, para encontrar algo, debe comenzar con el primero, luego siga las referencias de la cadena hasta que lo encuentre.

Para insertar algo, es posible que deba redirigir algunas de las referencias adecuadamente.

More Interesting

¿Cuáles son los requisitos previos para la introducción del algoritmo antes de tomarlo?

¿Cuáles son algunos algoritmos favoritos que los usuarios de Quora crearon por sí mismos?

Dada una matriz S de n enteros, ¿hay elementos a, b, c en S tales que a + b + c = 0? ¿Encuentra todos los tripletes únicos en la matriz que da la suma de cero?

Cómo resolver esta relación de recurrencia usando el método de sustitución

¿Dónde puedo aprender los algoritmos de clasificación y búsqueda?

¿Qué tipo de operaciones podrían aplicarse sobre un árbol de segmentos?

¿Cómo se explicaría a un lego el modelo computacional del juego de FIFA?

Quicksort: ¿Cuál es el algoritmo de ordenación rápida?

¿Cuáles son algunos ejemplos bien conocidos donde se usa la programación dinámica?

¿Qué haces si la resolución de un problema de algoritmo lleva demasiado tiempo?

¿Alguien ha trabajado en un algoritmo para predecir la corrupción de los funcionarios del gobierno público utilizando la minería de datos y el análisis predictivo?

¿Hay alguna guía sobre el uso de datos sintéticos para entrenar algoritmos de visión por computadora? ¿Hay alguna investigación al respecto?

¿Cuál es la mayor complejidad de tiempo que cualquier juez en línea puede aceptar como O (10 ^ 9) o algo en términos de números?

¿Qué es un árbol y un gráfico en las estructuras de datos?

Visión por computadora: ¿Qué parámetros se pueden usar para medir qué tan similares son dos imágenes?