Sunteți pe pagina 1din 6

Lista enlazadas doble circulares - Proyecto 1 https://sites.google.

com/site/listasenlazadas/lista-enlazadas-doble-circulares

Proyecto 1

Presentación Lista enlazadas doble circulares


Índice
Introducción
Contenido
¿Qué son listas enlazadas doble circulares?
Lista enlazada
doble lineal
Lista
En una lista enlazada doblemente circular, cada nodo tiene dos
enlazadas enlaces, similares a los de la lista doblemente enlazada, excepto que el
doble enlace anterior del primer nodo apunta al último y el enlace siguiente
circulares
del último nodo, apunta al primero. Como en una lista doblemente
Glosario
enlazada, las inserciones y eliminaciones pueden ser hechas desde
Conclusiones
cualquier punto con acceso a algún nodo cercano. Aunque
Anexos
Infografía
estructuralmente una lista circular doblemente enlazada no tiene ni
principio ni fin, un puntero de acceso externo puede establecer el nodo
apuntado que está en la cabeza o al nodo cola, y así mantener el orden
tan bien como en una lista doblemente enlazada.

1 de 6 11/06/2019 17:07
Lista enlazadas doble circulares - Proyecto 1 https://sites.google.com/site/listasenlazadas/lista-enlazadas-doble-circulares

Una lista doble circular es una estructura donde el último elemento


tiene como referencia siguiente al primer elemento y la referencia al
anterior del primer elemento de la lista también es el último. Cada
elemento esta doblemente enlazado.

A través del uso de listas dobles podemos acceder a los datos


recorriendo los hacia delante hasta el final o hacia atrás hasta el
inicio.

Operaciones básicas

Las operaciones básicas de una lista circular doble son:

Insertar un nodo con dato X en la lista realizando una inserción


al principio o al final de la lista.
Eliminar un nodo de la lista, puede ser según la posición o por el
dato
Buscar un elemento en la lista
Obtener la posición del nodo en la lista
Imprimir los elementos de la lista

2 de 6 11/06/2019 17:07
Lista enlazadas doble circulares - Proyecto 1 https://sites.google.com/site/listasenlazadas/lista-enlazadas-doble-circulares

Ejemplo de lista enlazada doble circular

Un ejemplo donde se almacenan números y vemos como la estructura


donde el último elemento tiene referencia siguiente al primer elemento
y la referencia al anterior al primer elemento de la lista también es el
último. Y con esto podemos ver que podemos acceder a los dato
recorriendo los hacia delante hasta el final o hacia atrás hasta el
inicio.

3 de 6 11/06/2019 17:07
Lista enlazadas doble circulares - Proyecto 1 https://sites.google.com/site/listasenlazadas/lista-enlazadas-doble-circulares

Ejemplo Real

Un formulario electrónico al finalizar cada pagina te da la opción ,


atrás y siguiente que te permite rectificar cualquier error regresando
atrás y adelante y al finalizar comienza nuevamente el formulario
para el siguiente usuario

Algoritmo para inserción de una lista circular doble


enlazada (Lenguaje de programación C)

Pasos para la inserción de una lista circular doble enlazada

4 de 6 11/06/2019 17:07
Lista enlazadas doble circulares - Proyecto 1 https://sites.google.com/site/listasenlazadas/lista-enlazadas-doble-circulares

vacía:
1. El primer paso es crear un nodo para el dato que vamos
a insertar.
2. Si Lista está vacía, o el valor del primer elemento de la
lista es mayor que el del nuevo, insertaremos el nuevo nodo
en la primera posición de la lista.
3. En caso contrario, buscaremos el lugar adecuado para la
inserción, tenemos un puntero "anterior". Lo iniciamos con
el valor de Lista, y avanzaremos mientras
anterior->siguiente no sea NULL y el dato que contiene
anterior->siguiente sea menor o igual que el dato que
queremos insertar.
4. Ahora ya tenemos anterior señalando al nodo adecuado,
así que insertamos el nuevo nodo a continuación de él.

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) {

5 de 6 11/06/2019 17:07
Lista enlazadas doble circulares - Proyecto 1 https://sites.google.com/site/listasenlazadas/lista-enlazadas-doble-circulares

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

Iniciar sesión | Actividad reciente del sitio |Notificar uso inadecuado | Imprimir página | Con la tecnología de

Google Sites

6 de 6 11/06/2019 17:07

S-ar putea să vă placă și