Listas enlazadas doble exposicion

Post on 01-Jul-2015

932 views 1 download

Transcript of Listas enlazadas doble exposicion

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