LISTAS DOBLEMENTE ENLAZADAS O LISTAS
ENLAZADAS DE DOS VÍAS
ALGORITMO Y ESTRUCTURA DE DATOS
José Carlos Urbina Martínez José Carlos Morales Raúl Leonardo Jorda Otero Marco Valentis
DEFINICIÓN
Es una lista enlazada pero mas superior. Cada nodo tiene dos
enlaces: uno apunta al nodo anterior, o apunta al valor NULL si es el primer
nodo; y otro que apunta al nodo siguiente, o apunta al valor NULL si
es el último nodo.
IMPORTANCIA Nos permite almacenar datos de una forma organiza.
Es una estructura TDA dinámica
Cada nodo de la lista doblemente enlazada contiene dos punteros, de forma que uno apunta al siguiente nodo y el otro al predecesor, permitiendo que se pueda recorrer la lista en ambos sentidos.
APLICACIÓN
Una gran manera de representar a una baraja de cartas en un juego.
Un árbol de pila, tabla hash, y binario se puede implementar utilizando una lista Doblemente enlazada.
ESTRUCTURA LÓGICA void Insertar(Lista *lista, int v) \{ pNodo nuevo, actual; /* Crear un nodo nuevo */ nuevo = (pNodo)malloc(sizeof(tipoNodo)); nuevo->valor = v; /* Colocamos actual en la primera posición de la lista */ actual = *lista; if(actual) while(actual->anterior) actual = actual->anterior; /* Si la lista está vacía o el primer miembro es mayor que el nuevo */ if(!actual || actual->valor > v) \{ /* Añadimos la lista a continuación del nuevo nodo */ nuevo->siguiente = actual; nuevo->anterior = NULL; if(actual) actual->anterior = nuevo; if(!*lista) *lista = nuevo; } else \{ /* Avanzamos hasta el último elemento o hasta que el siguiente tenga un valor mayor que v */ while(actual->siguiente &&actual->siguiente->valor <= v) actual = actual->siguiente; /* Insertamos el nuevo nodo después del nodo anterior */ nuevo->siguiente = actual->siguiente; actual->siguiente = nuevo; nuevo->anterior = actual; if(nuevo->siguiente) nuevo->siguiente->anterior = nuevo; }}
ESTRUCTURA GRAFICA
OPERACIONES Insertar un elemento en la primera posición de la listanodo->siguiente debe apuntar a Lista.nodo->anterior apuntará a Lista->anterior.Lista->anterior debe apuntar a nodo. Insertar un elemento en la última posición de la listanodo->siguiente debe apuntar a Lista->siguiente (NULL).Lista->siguiente debe apuntar a nodo.nodo->anterior apuntará a Lista. Insertar un elemento a continuación de un nodo cualquiera de una listaHacemos que nodo->siguiente apunte a lista->siguiente.Hacemos que Lista->siguiente apunte a nodo.Hacemos que nodo->anterior apunte a lista.Hacemos que nodo->siguiente->anterior apunte a nodo.
OPERACIONES void borrar (posicion p){if (p->anterior != NULL)
p->anterior->siguiente = p->siguiente;if (p->siguiente != NULL)
p->siguiente->anterior = p->anterior;free(p);}
GRACIAS POR SU ATENCIÓN!!!
Ingenios Ingeniados
Top Related