in

Lista vinculada vs matriz – GeeksforGeeks

gfg 200x200 min

Las matrices almacenan elementos en ubicaciones de memoria contiguas, lo que resulta en direcciones fácilmente calculables para los elementos almacenados y esto permite un acceso más rápido a un elemento en un índice específico. Las listas vinculadas son menos rígidas en su estructura de almacenamiento y los elementos generalmente no se almacenan en ubicaciones contiguas, por lo que deben almacenarse con etiquetas adicionales que den una referencia al siguiente elemento. Esta diferencia en el esquema de almacenamiento de datos decide qué estructura de datos sería más adecuada para una situación determinada.

Arrays 1

Esquema de almacenamiento de datos de una matriz

Linkedlist 2

Esquema de almacenamiento de datos de una lista vinculada

Las principales diferencias se enumeran a continuación:

  • Tamaño: Dado que los datos solo se pueden almacenar en bloques contiguos de memoria en una matriz, su tamaño no se puede modificar en tiempo de ejecución debido al riesgo de sobrescribir otros datos. Sin embargo, en una lista vinculada, cada nodo apunta al siguiente de manera que los datos pueden existir en direcciones dispersas (no contiguas); esto permite un tamaño dinámico que puede cambiar en tiempo de ejecución.
  • Asignación de memoria: Para matrices en tiempo de compilación y en tiempo de ejecución para listas enlazadas. pero, una matriz asignada dinámicamente también asigna memoria en tiempo de ejecución.
  • Eficiencia de la memoria: Para la misma cantidad de elementos, las listas vinculadas usan más memoria, ya que una referencia al siguiente nodo también se almacena junto con los datos. Sin embargo, la flexibilidad de tamaño en las listas enlazadas puede hacer que utilicen menos memoria en general; esto es útil cuando hay incertidumbre sobre el tamaño o hay grandes variaciones en el tamaño de los elementos de datos; se debe asignar memoria equivalente al límite superior del tamaño (incluso si no se está utilizando todo) mientras se utilizan matrices, mientras que las listas enlazadas pueden aumentar su tamaño paso a paso proporcionalmente a la cantidad de datos.
  • Tiempo de ejecución: Se puede acceder directamente a cualquier elemento de una matriz con su índice; sin embargo, en el caso de una lista enlazada, todos los elementos anteriores deben atravesarse para llegar a cualquier elemento. Además, una mejor ubicación de la caché en las matrices (debido a la asignación de memoria contigua) puede mejorar significativamente el rendimiento. Como resultado, algunas operaciones (como modificar un determinado elemento) son más rápidas en matrices, mientras que otras (como insertar / eliminar un elemento en los datos) son más rápidas en listas enlazadas.

A continuación se muestran los puntos a favor de las listas vinculadas.
(1) El tamaño de las matrices es fijo: por lo que debemos conocer el límite superior del número de elementos de antemano. Además, generalmente, la memoria asignada es igual al límite superior independientemente del uso, y en usos prácticos, el límite superior rara vez se alcanza.

(2) Insertar un nuevo elemento en una matriz de elementos es costoso porque se debe crear espacio para los nuevos elementos y para crear espacio, los elementos existentes deben cambiarse.

Por ejemplo, supongamos que mantenemos una lista ordenada de ID en una matriz de ID[ ].

identificación[ ] = [1000, 1010, 1050, 2000, 2040, …..].

Y si queremos insertar un nuevo ID 1005, entonces para mantener el orden ordenado, tenemos que mover todos los elementos después de 1000 (excluyendo 1000).

La eliminación también es costosa con matrices a menos que se utilicen algunas técnicas especiales. Por ejemplo, para eliminar 1010 en id[], todo después de 1010 tiene que ser movido.

Entonces, la lista vinculada proporciona las siguientes dos ventajas sobre las matrices
1) tamaño dinámico
2) Facilidad de inserción / eliminación

Las listas vinculadas tienen los siguientes inconvenientes:
1) No se permite el acceso aleatorio. Tenemos que acceder a los elementos de forma secuencial partiendo del primer nodo. Por tanto, no podemos hacer una búsqueda binaria con listas enlazadas.
2) Se requiere espacio de memoria adicional para un puntero con cada elemento de la lista.
3) Las matrices tienen una mejor ubicación de caché que puede marcar una gran diferencia en el rendimiento.

4) Se necesita mucho tiempo para atravesar y cambiar los punteros.

5) Será confuso cuando trabajemos con punteros.

Referencias:
http://cslibrary.stanford.edu/103/LinkedListBasics.pdf

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

¡Atención lector! No dejes de aprender ahora. Obtenga todos los conceptos importantes de DSA con el Curso autodidacta de DSA a un precio asequible para los estudiantes y prepárese para la industria. Para completar su preparación desde el aprendizaje de un idioma hasta DS Algo y muchos más, consulte Curso completo de preparación para entrevistas.

En caso de que desee asistir clases en vivo con expertos, consulte Clases en vivo de DSA para profesionales que trabajan y Programación competitiva en vivo para estudiantes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

apple touch icon@2

tsql – ¿Cómo escribir un foreach en SQL Server?

360px branches of islam

Sunni vs Shia – 15 diferencias (con video)