Práctica 9: Listas doblemente enlazadas Resumen Las listas doblemente enlazadas permiten ser recorridas de principio a fin o viceversa. Gracias a los punteros hacia atrás permiten que ciertas operaciones de inserción (InsertaNodoAntesde y borrado de nodos ExtraeNodo resulten más eficientes que para listas simplemente enlazadas. 1. Introducción Partiendo de la base de datos almacenada en un fichero binario vamos a realizar un programa con las siguientes opciones de menú: 1.- Cargar lista doblemente enlazada desde fichero binario 2.- Ordenar por campo de autor, método de inserción 3.- Imprimir lista En la opción 1 los datos se cargan desde fichero binario (sin palabras clave). Con la opción 3 vemos los datos en orden de entrada. En la opción 2 usamos el método de inserción sobre la lista doblemente enlazada para obtener una ordenación por el campo de autor. Volveremos a usar la opción 3 para ver los datos ordenados. 2. Inserción. Lista simple El código C del algoritmo de inserción para ordenar por el campo de referencia en listas simplemente enlazadas es el siguiente: T_NODO_LIBRO *Ordena_ins(T_NODO_LIBRO *pcabecera) { T_NODO_LIBRO *pnodo_act, *pnodo_ant, *pnodo; if(MenosdeDos(pcabecera) == 1) return pcabecera; pnodo_act = pcabecera->psig_nodo; while(pnodo_act->psig_nodo != NULL) { pnodo_act = pnodo_act->psig_nodo; pnodo = pnodo_act; // pivote pnodo_ant = pcabecera->psig_nodo; while(pnodo_ant->psig_nodo!=pnodo_act && pnodo_ant->libro.ref < pnodo->libro.ref) pnodo_ant = pnodo_ant->psig_nodo; if(pnodo_ant->libro.ref > pnodo->libro.ref) { pnodo_act = ExtraeNodo(pcabecera,pnodo); InsertaNodoAntesde(pcabecera,pnodo_ant,pnodo); } } return pcabecera; } Implantar este algoritmo sobre la lista simplemente enlazada para una primera versión del programa. 3. Inserción. Lista doble Implantar el algoritmo anterior sobre la lista doblemente enlazada. 4. División en funciones Usar al menos las funciones IniLista_doble, AnadeNodo_doble, Odena_ins_doble, MenosdeDos_doble, ExtraeNodo_doble e InsertaNodoAntesde_doble. 1