Download - Listas enlazadas doble exposicion

Transcript
Page 1: Listas enlazadas doble exposicion

LISTAS DOBLEMENTE ENLAZADAS O LISTAS

ENLAZADAS DE DOS VÍAS

Page 2: Listas enlazadas doble exposicion

ALGORITMO Y ESTRUCTURA DE DATOS

José Carlos Urbina Martínez José Carlos Morales Raúl Leonardo Jorda Otero Marco Valentis

Page 3: Listas enlazadas doble exposicion

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.

Page 4: Listas enlazadas doble exposicion

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.

Page 5: Listas enlazadas doble exposicion

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.

Page 6: Listas enlazadas doble exposicion

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; }}

Page 7: Listas enlazadas doble exposicion

ESTRUCTURA GRAFICA

Page 8: Listas enlazadas doble exposicion

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.

Page 9: Listas enlazadas doble exposicion

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);}

Page 10: Listas enlazadas doble exposicion

GRACIAS POR SU ATENCIÓN!!!

Ingenios Ingeniados