Se puede usar una lista vinculada cuando desee insertar y eliminar elementos de forma económica y cuando no importa que los elementos no estén uno al lado del otro en la memoria.
Esto es muy abstracto y me gustaría una explicación concreta de por qué debería usarse una lista vinculada en lugar de una matriz. No tengo mucha experiencia en programación, por lo que no tengo mucha (si alguna) experiencia en el mundo real.
data-structures
linked-list
pliegue derecho
fuente
fuente
Respuestas:
Aquí hay algo a medio camino entre un ejemplo y una analogía. Tienes que hacer algunos recados, así que agarras un pedazo de papel y escribes:
Entonces recuerdas que también necesitas comprar sellos. Debido a la geografía de tu ciudad, debes hacerlo después del banco. Puede copiar su lista completa en una nueva hoja de papel:
o podrías garabatear en el que tenías:
Al pensar en otros recados, puede escribirlos al final de la lista, pero con flechas que le recuerdan en qué orden hacerlos. Esta es una lista vinculada. Es más rápido y fácil que copiar toda la lista cada vez que agrega algo.
Entonces su teléfono celular suena mientras está en el banco "oye, tengo las estampillas, no recojas más". Simplemente eliminas los SELLOS de la lista, no reescribes uno nuevo sin SELLOS.
Ahora podría implementar una lista de recados en el código (tal vez una aplicación que ordene sus recados en función de su geografía) y existe una posibilidad razonable de que realmente use una lista vinculada para eso en el código. Desea agregar y eliminar muchos elementos, el orden importa, pero no desea volver a copiar toda la lista después de cada inserción o eliminación.
fuente
fuente
La "pila de llamadas" en lenguaje C se implementa como una lista vinculada en las API binarias x86 (y la mayoría de las otras).
Es decir, la llamada al procedimiento en lenguaje C sigue una disciplina de primero en entrar, último en salir. El resultado de ejecutar llamadas de función (posiblemente recursivas) se denomina "pila de llamadas" o, a veces, incluso "la pila".
La
CALL
instrucción x86 termina implicando una lista vinculada usando la "pila de llamadas". UnaCALL
instrucción empuja el contenido del registro% EIP, la dirección de la instrucción después de laCALL
memoria de la pila. El prólogo de función llamada empuja los contenidos del registro% EBP, la dirección más baja de las variables locales en la función de llamada, a la memoria de la pila. Luego, el prólogo de la función llamada establece% EBP en la base de la pila de la función actual.Eso significa que% EBP es un puntero a una ubicación de memoria que contiene la dirección del valor% EBP de la función que realiza la llamada. Eso no es más que una lista vinculada, implementada parcialmente en hardware a través de
CALL
.En cuanto a lo que es bueno para esto, es cómo las CPU x86 implementan llamadas a funciones, particularmente llamadas a funciones donde la función tiene su propia copia de argumentos y variables locales a la función. Cada llamada a la función introduce cierta información en la "pila de llamadas" que permite que la CPU retome donde se quedó en la función de llamada, sin interferencia de la función llamada o la función de llamada.
fuente
Se puede usar una lista vinculada para implementar una cola de mensajes.
Una cola de mensajes es una estructura en la que almacenamos información sobre eventos para su posterior procesamiento. Por ejemplo, cuando el usuario presiona una tecla o mueve el mouse, este es un evento. Una aplicación puede estar ocupada en el momento en que ocurre el evento, por lo que no se puede esperar que procese el evento en el momento preciso en que ocurre. Entonces, el evento se coloca en una cola de mensajes (información sobre qué tecla se presionó o dónde se movió el mouse), y cuando la aplicación tiene tiempo de sobra, verifica su cola de mensajes, recupera eventos de ella y procesa ellos. (Esto sucede dentro de un marco de tiempo de milisegundos, por lo que no se nota).
Del escenario de uso que acabo de describir, debería ser obvio que nunca nos importa tener acceso aleatorio a los eventos almacenados en la cola de mensajes; solo nos importa poder almacenar mensajes en él y recuperarlos. Por lo tanto, tiene sentido utilizar una lista vinculada, que proporciona un tiempo óptimo de inserción / eliminación.
(No ingrese para señalar que una cola de mensajes es probable, o más probable, o casi tan probable, que se implementará utilizando una lista de matriz circular; eso es un detalle técnico y tiene una limitación: solo puede almacenar un número limitado de mensajes en él)
fuente