La lista de doble ligado

Video: Lista Doblemente Ligada C++ 3 - Eliminar, Anular, Recuperar y Localizar

Las listas enlazadas pueden ser bastante útil, por una serie de razones - a pesar de que tomar algún tiempo para envolver su mente alrededor del concepto. ¿Que es peor? La lista de doble vinculado.

Video: Primeras Veces VS. Ahora

En lugar de simplemente enlace directo a la siguiente estructura, una Lista de doble ligado También acoplamientos posteriores a la estructura anterior.

El código siguiente muestra un programa de lista interactiva, doble vinculado. Es enorme. Compararlo con el código de lista enlazada en este libro para ver los pasos adicionales adoptadas para mantener los dos punteros anterior y posterior dentro de la estructura.

Video: Lista doblemente ligada en Java - Parte 1

/ * Un programa interactivo DOBLE lista enlazada * // * Dan Gookin, A partir de programación con C para los maniquíes * / # include # include # include struct {int típica estructura típica de valor * de nueva estructura típica * anterior -} - estructura típica * primera estructura típica * corriente estructura típica * menú nueva-int (void) -void añadir (void) -void espectáculo (void) -void eliminar (void) volcado -void (void) -struct típica * crear (void) - / * la función principal funciona con la entrada only.Everything más se controla mediante una función * / int main) {elección (int = ``! - / * obtener el bucle while para girar * / primera = NULL-tiempo (opción =` Q `) {elección = menú () - interruptor (elección) {case `S`: show () - break-caso `A`: add () - romper caso `R`: delete () - break-caso` D `: dump () - romper caso `Q`: break-default: rotura -}} return (0) -} / * Muestra el menú principal y recoger la entrada * / menú int (void) {int ch-printf ("S) cómo, A) dd, R) emove, D) UMP, Q) uit: ") -CH = getchar () - tiempo (getchar () = `n`) / * eliminar el exceso de entrada * / - retorno (toupper (CH)) -} / * Añadir un elemento al final de la lista enlazada * / add (void) {if (primera == NULL) / * caso especial para el primer artículo * / {primera = create () - actual = primera corriente gt; = anterior null-} else / * encontrar el último elemento * / {actual = primer tiempo (corriente-gt; siguiente) / * último elemento == NULL * / corriente = corriente gt; de próxima nuevos = crear () - actual-gt; = próxima nueva - / * enlace de actualización * / new-gt; anterior = corriente de corriente = nueva-} printf ("Escriba un valor: ") -scanf ("%re",&! Corriente-gt; valor) -CURRENT-gt; siguiente = NULL-while (getchar () = `n`) / * eliminar el exceso de la entrada * / -} / * Muestra todas las estructuras en la lista enlazada * / void espectáculo (void ) {int count = 1-Si (primera == NULL) / * esta lista está vacía * / {puts ("No hay nada que mostrar") -return-} puts ("Mostrando todos los archivos:") = -actual primer tiempo (actual) / * último registro == NULL * / {printf ("Grabar% d:% dn", Contar, corriente gt; valor) -actual = corriente gt; de próxima recuento ++ -}} / * Eliminación de un registro de la lista * / void delete (void) {int r, c-Si (primera == NULL) / * comprobar la lista vacía * / {puts ("No hay registros para eliminar") -return-} puts ("Elija un registro para eliminar:") -show () - printf ("Grabar: ") -scanf ("%re",&r) -mientras (getchar () = `n`) / * eliminar el exceso de la entrada * / -! c = 1-actual = primero-while (c = r) {if (== actual NULL) / * asegurar que ` r` está en el rango * / {puts ("Registro no encontrado") -return-} = corriente actual-gt; de próxima c ++ -} if (corriente-gt; == NULL anterior) / * Caso especial para el primer registro * / {primera = corriente gt; de próxima primera gt; anterior = null-} else / * punto de registro anterior en el siguiente * / {actual-gt; próxima gt; anterior = corriente-gt; anterior de corriente-gt; anterior-gt; siguiente = corriente-gt; de próxima} printf ("Grabar% d removed.n", R) exento (actual) - / * Memoria de liberación * /} / * puntero referencias de visualización en la lista enlazada * // * Copiado en su mayoría del show () la función * / void volcado (void) {int count = 1- Si (primera == NULL) / * esta lista está vacía * / {puts ("Nada para volcar") -return-} puts ("referencias de puntero") -CURRENT = primero-printf ("registro #tPrevioustCurrenttNextn") -mientras (actual) / * último registro == NULL * / {printf ("Grabar% d: t% pt% pt% pn", Contar, corriente gt; anterior, la corriente, la corriente-gt; siguiente) -actual = corriente gt; de próxima recuento ++ -}} / * Construir una estructura vacía y devuelve su dirección * / struct típica * crear (void) { estructura típica * aa = (* estructura típica) malloc (sizeof (struct típica)) - if (a == null) {puts ("Algún tipo de malloc () Error") -exit (1) -} return (a) -}
Artículos Relacionados