Práctica 9: Listas doblemente enlazadas

Anuncio
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
Descargar