ESTRUCTURA DE
DATOS
Contenido:
❑ TAD lista.
❑ Listas enlazadas.
❑ Clasificación de las listas enlazadas.
❑ Operaciones en una lista.
Prof. David Candela
TAD (TIPO ABSTRACTO DE DATOS)
LISTA
Una lista almacena información del mismo tipo, con la característica de que puede
contener un número indeterminado de elementos, y que estos elementos mantienen un
orden explícito. Este ordenamiento explícito se manifiesta en que, en sí mismo, cada
elemento contiene la dirección del siguiente elemento. Cada elemento es un nodo de la
lista.
TAD (TIPO ABSTRACTO DE DATOS)
LISTA
Una lista es una estructura de datos dinámica. El número de nodos puede variar
rápidamente en un proceso. Aumentando los nodos por inserciones, o bien,
disminuyendo por eliminación de nodos.
TAD (TIPO ABSTRACTO DE DATOS)
LISTA
Las inserciones se pueden realizar por cualquier punto de la lista. Por la cabeza (inicio),
por el final (cola), a partir o antes de un nodo determinado de la lista. Las eliminaciones
también se pueden realizar en cualquier punto de la lista; además se eliminan nodos
dependiendo del campo de información o dato que se desea suprimir de la lista.
ACCESO A LA LISTA: CABECERA
Y COLA
Cuando se construye y utiliza una lista enlazada en una aplicación, el acceso a la lista se
hace mediante uno, o más, punteros a los nodos. Normalmente, se accede a partir del
primer nodo de la lista, llamado cabeza o cabecera de la lista. En ocasiones, se mantiene
también un apuntador al último nodo de la lista enlazada, llamado cola de la lista.
ACCESO A LA LISTA: CABECERA
Y COLA
Los apuntadores, cabeza y cola, se declararan como variables puntero a Nodo:
Nodo* cabeza;
Nodo* cola;
Acceso a una lista con puntero cabeza
ACCESO A LA LISTA: CABECERA
Y COLA
La Figura anterior muestra una lista a la que se accede con el puntero cabeza; cada nodo
está enlazado con el siguiente nodo. El último nodo, cola o final de la lista, no se enlaza
con otro nodo, entonces su campo de enlace contiene nulo (0 o NULL indistintamente).
Normalmente NULL se utiliza en dos situaciones:
∙ Campo enlace del último nodo (final o cola) de una lista enlazada.
∙ Como valor cabeza, para una lista enlazada que no tiene nodos, es decir una lista
vacía (cabeza = NULL).
Acceso a una lista con puntero cabeza
Nota de programación: Las variables de acceso a una lista, cabeza y cola, se inicializan a
NULL cuando comienza la construcción de la lista.
LISTAS
ENLAZADAS
Una lista enlazada es una colección o secuencia de elementos dispuestos uno detrás de
otro, en la que cada elemento se conecta al siguiente elemento por un “enlace”. La idea
básica consiste en construir una lista cuyos elementos, llamados nodos, se componen de
dos partes (campos): la primera parte contiene la información y es, por consiguiente, un
valor de un tipo genérico (denominado Dato, TipoElemento, Info, etc.), y la segunda parte
es un enlace que apunta al siguiente nodo de la lista.
Lista enlazada (representación simple)
LISTAS
ENLAZADAS
La representación gráfica más extendida es aquella que utiliza una caja con dos secciones
en su interior. En la primera sección se encuentra el elemento o valor del dato y en la
segunda sección el enlace, representado mediante una flecha que sale de la caja y apunta
al siguiente nodo.
LISTAS
ENLAZADAS
Una lista enlazada consta de un numero de nodos con dos componentes (campos), un
enlace al siguiente nodo de la lista y un valor, que puede ser de cualquier tipo.
Los enlaces se representan por flechas para facilitar la comprensión de la conexión entre
dos nodos; ello indica que el enlace tiene la dirección en memoria del siguiente nodo. Los
enlaces también sitúan los nodos en una secuencia. La Figura anterior muestra una lista
cuyos nodos forman una secuencia desde el primer elemento (e 1) al último elemento (e n).
El último nodo ha de representarse de forma diferente, para significar que este nodo no
se enlaza a ningún otro.
CLASIFICACIÓN DE LAS LISTAS
ENLAZADAS
Las listas se pueden dividir en cuatro categorías:
∙ Listas simplemente enlazadas. Cada nodo (elemento) contiene un único enlace que
conecta ese nodo al nodo siguiente o nodo sucesor. La lista es eficiente en recorridos
directos (“adelante”).
∙ Listas doblemente enlazadas. Cada nodo contiene dos enlaces, uno a su nodo
predecesor y el otro a su nodo sucesor. La lista es eficiente tanto en recorrido directo
(“adelante”) como en recorrido inverso (“atrás”).
CLASIFICACIÓN DE LAS LISTAS
ENLAZADAS
∙ Lista circular simplemente enlazada. Una lista simplemente enlazada en la que el
último elemento (cola) se enlaza al primer elemento (cabeza) de tal modo que la lista
puede ser recorrida de modo circular (“en anillo”).
∙ Lista circular doblemente enlazada. Una lista doblemente enlazada en la que el último
elemento se enlaza al primer elemento y viceversa. Esta lista se puede recorrer de
modo circular (en anillo) tanto en dirección directa (“adelante”) como inversa
(“atrás”).
CLASIFICACIÓN DE LAS LISTAS
ENLAZADAS
La implementación de cada uno de los cuatro tipos de estructuras de listas se puede
desarrollar utilizando punteros.
Representación gráfica de una lista enlazada
El primer nodo, frente, de una lista es el nodo apuntado por cabeza. La lista encadena
nodos juntos desde el frente al final (cola) de la lista. El final se identifica como el nodo
cuyo campo enlace tiene el valor NULL. La lista se recorre desde el primero al último
nodo; en cualquier punto del recorrido la posición actual se referencia por el puntero
actual. Una lista vacía, es decir, que no contiene nodos se representa con el puntero
cabeza a nulo.
LISTA ENLAZADA
SIMPLE
Una lista enlazada simple es el tipo más sencillo de lista enlazada, en la que cada nodo
contiene algunos datos y una referencia al siguiente nodo de la secuencia. Sólo pueden
recorrerse en una única dirección: de la cabeza (el primer nodo) a la cola (el último nodo).
CONSTRUCCIÓN DE UNA
LISTA
La creación de una lista enlazada implica la definición de, al menos, las clases Nodo y Lista.
La clase Lista declara las dos partes en que se divide el nodo: dato y enlace; y la clase Lista
contiene el puntero de acceso a la lista enlazada, de nombre primero, que apunta al nodo
cabeza; también se puede declarar un puntero al nodo cola.
Las funciones de la clase Lista implementan las operaciones de una lista enlazada:
inserción, búsqueda y demás. En programación, el constructor inicializa “primero” a NULL,
(lista vacía). Además, una función, crear-Lista(), construye iterativamente el primer
elemento y los elementos sucesivos de una lista enlazada.
CONSTRUCCIÓN DE UNA
LISTA
El siguiente ejemplo declara una lista para un tipo particular de dato: int. Así mismo se
muestra la codificación, paso a paso, de la función crearLista().
Ejemplo: crear una lista enlazada de elementos que almacenen datos de tipo entero.
typedef int dato;
#include “Nodo.h”
class Lista
{
protected:
Nodo* primero;
public:
Lista()
{
primero = NULL;
}
void crearLista();
//…
CONSTRUCCIÓN DE UNA
LISTA
La referencia primero (también se puede llamar cabeza) se ha inicializado en el
constructor a un valor nulo, es decir, a lista vacía. A continuación, se muestra el
comportamiento de la función crearLista().
En primer lugar, se crea un nodo con un valor y su dirección se asigna a primero:
CONSTRUCCIÓN DE UNA
LISTA
Ahora se desea añadir un nuevo elemento con el valor 61, y situarlo en el primer lugar de
la lista. Se utiliza el constructor de Nodo que enlaza con otro nodo ya creado:
Por ultimo, para obtener una lista compuesta de 4, 61 y 19 se habría de ejecutar:
CONSTRUCCIÓN DE UNA
LISTA
A continuación, se escribe CrearLista() que codifica las acciones descritas anteriormente.
Los valores se leen del teclado, termina con el valor clave -1.
void Lista::crearLista()
{
int x;
primero = 0;
cout << "Termina con -1" << endl;
do {
cin >> x;
if (x != -1)
{
primero = new Nodo(x,primero);
}
}while (x != -1);
}
EJEMPLO
4.0
Este código muestra la creación de una lista simplemente enlazada, además del ingreso
de valores en la lista.
EJEMPLO
4.1
Este ejemplo muestra como visualizar los elementos de una lista enlazada.
EJEMPLO
4.1
EJERCICIO
4.1
Crear una lista que almacene “n” números enteros y determine el menor y mayor
de ellos.
EJERCICIO
4.2
Crear una lista que almacene “n” números reales y calcular su suma y promedio
de estos.
OPERACIONES EN UNA LISTA ENLAZADA
SIMPLE
Inserción en una lista:
El nuevo elemento que se desea incorporar a una lista se puede insertar de distintas
formas, según la posición o punto de inserción. Éste puede ser:
∙ En la cabeza (elemento primero) de la lista.
∙ En el final o cola de la lista (elemento último).
∙ Antes de un elemento especificado, o bien.
∙ Después de un elemento especificado.
INSERTAR EN LA CABEZA DE LA
LISTA
La posición más fácil y, a la vez, más eficiente donde insertar un nuevo elemento en una
lista es por la cabeza. El proceso de inserción se resume en este algoritmo:
1. Crear un nodo e inicializar el campo dato al nuevo elemento. La dirección del nodo
creado se asigna a nuevo.
2. Hacer que el campo enlace del nodo creado apunte a la cabeza (primero) de la lista.
3. Hacer que primero apunte al nodo que se ha creado.
INSERTAR EN LA CABEZA DE LA
LISTA
El siguiente ejemplo inserta un elemento por la cabeza de una lista siguiendo los pasos
del algoritmo.
Ejemplo: Una lista enlazada contiene tres elementos, 10, 25 y 40. Insertar un nuevo
elemento, 4, en cabeza de la lista
INSERTAR EN LA CABEZA DE LA
LISTA
Paso 1
Paso 2
Paso 3
En este momento, la función termina su ejecución, la variable local nuevo desaparece y
sólo permanece el puntero primero al inicio de la lista.
INSERCIÓN AL FINAL DE LA
LISTA
La inserción al final de la lista es menos eficiente debido a que, normalmente, no se tiene
un puntero al último nodo y entonces se ha de seguir la traza desde la cabeza de la lista
hasta el último nodo y, a continuación, realizar la inserción. Una vez que la variable ultimo
apunta al final de la lista, el enlace con el nuevo nodo es sencillo:
El campo enlace del último nodo queda apuntando al nodo creado y así se enlaza, como
nodo final, a la lista.
INSERTAR ENTRE DOS NODOS DE LA
LISTA
La inserción de un nodo no siempre se realiza al principio o al final de la lista, puede
hacerse entre dos nodos cualesquiera. Por ejemplo, en la lista de la Figura siguiente se
quiere insertar el elemento 75 entre los nodos con los datos 25 y 40.
Inserción entre dos nodos
INSERTAR ENTRE DOS NODOS DE LA
LISTA
El algoritmo para la operación de insertar entre dos nodos (n1, n2) requiere las siguientes
etapas:
1. Crear un nodo con el elemento y el campo enlace a NULL.
2. Poner campo enlace del nuevo nodo apuntando a n2, ya que el nodo creado se
ubicará justo antes de n2.
3. Si el puntero anterior tiene la dirección del nodo n1, entonces poner su atributo
enlace apuntando al nodo creado.
INSERTAR ENTRE DOS NODOS DE LA
LISTA
A continuación, se muestra gráficamente las etapas del algoritmo relativas a la
inserción de 75 entre 25 (n1) y 40 (n2).
Etapa 1
Etapa 2
INSERTAR ENTRE DOS NODOS DE LA
LISTA
Etapa 3
EJEMPLO
4.2
Este ejemplo muestra las opciones de insertar y visualizar elementos de una lista
enlazada simple mediante un menú.
EJEMPLO
4.2
EJEMPLO
4.2
BÚSQUEDA EN LISTA
ENLAZADA
La operación búsqueda de un elemento en una lista enlazada recorre la lista hasta
encontrar el nodo con el elemento. El algoritmo que se utiliza, una vez encontrado
el nodo, devuelve el puntero al nodo (en caso negativo, devuelve NULL). Otro
planteamiento consiste en devolver true si encuentra el nodo y false si no está en
la lista
Búsqueda en una lista
EJEMPLO
4.3
El código siguiente muestra el recorrido de una lista enlazada simple para
determinar si existe un elemento buscado.
EJEMPLO
4.3
EJEMPLO
4.3
EJEMPLO
4.3
BORRADO DE UN
NODO
Eliminar un nodo de una lista enlazada supone enlazar el nodo anterior con el
nodo siguiente al que se desea eliminar y liberar la memoria que ocupa. El
algoritmo se enfoca para eliminar un nodo que contiene un dato, sigue estos pasos:
1. Búsqueda del nodo que contiene el dato. Se ha de obtener la dirección del
nodo a eliminar y la dirección del anterior.
2. El enlace del nodo anterior que apunte al nodo siguiente al que se elimina.
3. Si el nodo a eliminar es el cabeza de la lista (primero), se modifica primero para
que tenga la dirección del siguiente nodo.
4. Por último, la memoria ocupada por el nodo se libera.
EJEMPLO
4.4
El siguiente ejemplo muestra principalmente la eliminación de un elemento de
una lista enlazada simple.
EJEMPLO
4.4
EJEMPLO
4.4
EJEMPLO
4.4
EJEMPLO
4.4
EJEMPLO
4.5
El siguiente ejemplo principalmente muestra la opción de eliminar una lista
completa enlazada simple.
EJEMPLO
4.5
EJEMPLO
4.5
EJEMPLO
4.5
EJEMPLO
4.5
LISTA DOBLEMENTE
ENLAZADA
Hasta ahora el recorrido de una lista se ha realizado en sentido directo (adelante). Existen
aplicaciones en las que es conveniente poder acceder a los nodos de una lista en
cualquier orden, tanto hacia adelante como hacia atrás. Desde un nodo de una lista
doblemente enlazada se puede avanzar al siguiente, o bien retroceder al nodo anterior.
Cada nodo de una lista doble tiene tres campos, el dato y dos punteros, uno apunta al
siguiente nodo de la lista y el otro al nodo anterior. La siguiente figura muestra una lista
doblemente enlazada y un nodo de dicha lista.
Lista doblemente enlazada. (a) lista con tres nodos; (b) un nodo
LISTA DOBLEMENTE
ENLAZADA
Las operaciones de una Lista Doble son similares a las de una Lista: insertar, eliminar,
buscar, recorrer... La operación de insertar un nuevo nodo en la lista debe realizar ajustes
de los dos punteros. La siguiente figura muestra los movimientos de punteros para
insertar un nodo, como se observa intervienen cuatro enlaces.
Inserción de un nodo en una lista doblemente enlazada
OPERACIONES EN UNA LISTA DOBLEMENTE
ENLAZADA
Insertar un nodo en una lista doblemente enlazada
Se puede añadir nodos a la lista de distintas formas, según la posición donde se
inserte. La posición de inserción puede ser:
∙ En cabeza de la lista.
∙ Al final de la lista.
∙ Antes de un elemento especificado.
∙ Después de un elemento especificado.
INSERTAR POR LA
CABEZA
El proceso sigue estos pasos:
1. Crear un nodo con el nuevo elemento.
2. Hacer que el campo adelante del nuevo nodo apunte a la cabeza (primer
nodo) de la lista original, y que el campo atrás del nodo cabeza apunte al
nuevo nodo.
3. Hacer que cabeza apunte al nodo creado.
INSERTAR DESPUÉS DE UN
NODO
El algoritmo de la operación que inserta un nodo después de otro, n, requiere
las siguientes etapas:
1. Crear un nodo, nuevo, con el elemento.
2. Poner el enlace “adelante” del nodo creado apuntando al nodo siguiente de
n. El enlace “atrás” del nodo siguiente a n (si n no es el último nodo) tiene
que apuntar a nuevo.
3. Hacer que el enlace “adelante” del nodo n apunte al nuevo nodo. A su vez,
el enlace atrás del nuevo nodo debe de apuntar a n.
ELIMINAR UN NODO DE UNA LISTA DOBLEMENTE
ENLAZADA
Quitar un nodo de una lista doble supone ajustar los enlaces de dos nodos, el nodo
anterior con el nodo siguiente al que se desea eliminar. El puntero “adelante” del nodo
anterior debe apuntar al nodo siguiente, y el puntero “atrás” del nodo siguiente debe
apuntar al nodo anterior.
ELIMINAR UN NODO DE UNA LISTA DOBLEMENTE
ENLAZADA
El algoritmo es similar al del borrado para una lista simple, más simple, ya que ahora la
dirección del nodo anterior se encuentra en el campo atrás del nodo a borrar. Los pasos
a seguir son:
1. Búsqueda del nodo que contiene el dato.
2. El puntero “adelante” del nodo anterior tiene que apuntar al puntero “adelante” del
nodo a eliminar (si no es el nodo cabecera).
3. El puntero atrás del nodo siguiente a borrar tiene que apuntar a donde apunta el
puntero atrás del nodo a eliminar (si no es el último nodo).
4. Si el nodo que se elimina es el primero, se modifica cabeza para que tenga la
dirección del nodo siguiente.
5. La memoria ocupada por el nodo es liberada.
ELIMINAR UN NODO DE UNA LISTA DOBLEMENTE
ENLAZADA
La operación de eliminar un nodo de la lista doble necesita enlazar, mutuamente, el
nodo anterior y el nodo siguiente del que se borra, como se observa en la siguiente
figura:
Eliminación de un nodo en una lista doblemente enlazada
EJERCICIO
4.6
Este código muestra la creación de una lista doblemente enlazada y despliega sus
elementos en forma directa.
EJERCICIO
4.6
EJERCICIO
4.6
EJERCICIO
4.7
Este código muestra la búsqueda de un nodo en una lista doblemente enlazada.
EJERCICIO
4.7
EJERCICIO
4.7
EJERCICIO
4.7
EJERCICIO
4.8
Este código muestra la modificación de un nodo en una lista doblemente enlazada.
EJERCICIO
4.8
EJERCICIO
4.8
EJERCICIO
4.8
EJERCICIO
4.8
EJERCICIO
4.9
Este código muestra la eliminación de un nodo en una lista doblemente enlazada.
EJERCICIO
4.9
EJERCICIO
4.9
EJERCICIO
4.9
EJERCICIO
4.9
EJERCICIO
4.9
LISTA CIRCULAR SIMPLEMENTE
ENLAZADA
Es una secuencia de nodos dispuestos de tal manera que cada nodo pueda volver a sí
mismo. Es aquella en la que el ultimo elemento (cola de la lista) se enlaza al primer
elemento (cabeza de la lista), de tal modo que la lista puede ser recorrida de modo
circular (en anillo). A continuación, se muestra una representación de una lista enlazada
circular con 3 nodos.
Aquí puede ver que cada nodo es rastreable hasta sí mismo. El ejemplo que se muestra
arriba es una lista circular enlazada individualmente.
LISTA CIRCULAR SIMPLEMENTE
ENLAZADA
La lista circular enlazada más simple es un nodo que rastrea solo hasta sí mismo, como se
muestra.
LISTA CIRCULAR SIMPLEMENTE
ENLAZADA
La creación de un nodo varía respecto al de las listas no circulares, el campo enlace, en
vez de inicializarse a NULL, se inicializa para que apunte a sí mismo, de tal forma que es
una lista circular de un solo nodo.
OPERACIONES BÁSICAS EN LISTAS CIRCULARES
ENLAZADAS
Las operaciones básicas en una lista enlazada circular son:
1. Inserción
2. Eliminación y
3. Travesía
∙ La inserción es el proceso de colocar un nodo en una posición específica en la lista
circular enlazada.
∙ La eliminación es el proceso de eliminar un nodo existente de la lista vinculada. El
nodo puede identificarse por la aparición de su valor o por su posición.
∙ El recorrido de una lista enlazada circular es el proceso de mostrar el contenido
completo de la lista enlazada y volver al nodo de origen.
INSERCIÓ
N
Inicialmente, necesitas crear un nodo que apunte a sí mismo como se muestra en la
imagen siguiente. La inserción crea el primer nodo.
INSERCIÓ
N
A continuación, existen dos posibilidades:
∙ Inserción en la posición actual de la lista circular enlazada. Esto corresponde a la
inserción al principio o final de una lista enlazada singular regular. En una lista
circular enlazada, el principio y el final son iguales.
∙ Inserción después de un nodo indexado. El nodo debe identificarse mediante un
número de índice correspondiente al valor de su elemento.
INSERCIÓ
N
Para insertar al principio/final de la lista circular enlazada, es decir, en la posición
donde se agregó el primer nodo,
∙ Tendrá que romper el autovínculo existente con el nodo existente.
∙ El siguiente puntero del nuevo nodo se vinculará al nodo existente.
∙ El siguiente puntero del último nodo apuntará al nodo insertado.
INSERCIÓ
N
Los pasos se muestran a continuación: Nodo existente
Romper el enlace existente
Crear un enlace directo (desde un nuevo nodo a un nodo existente)
INSERCIÓ
N
Crear un enlace de bucle al primer nodo
INSERCIÓN DESPUÉS DE UN
NODO
Por ejemplo, insertemos "VALOR2" después del nodo con "VALOR0". Supongamos que
el punto de partida es el nodo con “VALOR0”.
∙ Tendrás que romper la línea entre el primer y segundo nodo y colocar el nodo con
“VALOR2” en el medio.
∙ El siguiente puntero del primer nodo debe vincularse a este nodo, y el siguiente
puntero de este nodo debe vincularse al segundo nodo.
∙ Todos los nodos son rastreables hasta ellos mismos.
INSERCIÓN DESPUÉS DE UN
NODO
NOTA:
Dado que existe una disposición cíclica, insertar un nodo implica el mismo
procedimiento para cualquier nodo. El puntero que completa un ciclo completa el ciclo
como cualquier otro nodo. Esto se muestra a continuación:
Digamos que sólo hay dos nodos. Este es un caso trivial)
INSERCIÓN DESPUÉS DE UN
NODO
Paso 1:
Retire el enlace interno entre los nodos conectados.
INSERCIÓN DESPUÉS DE UN
NODO
Paso 2:
Conecte el nodo del lado izquierdo al nuevo nodo
INSERCIÓN DESPUÉS DE UN
NODO
Paso 3:
Conecte el nuevo nodo al nodo del lado derecho.
ELIMINAR UN
ELEMENTO
Eliminar un nodo de una lista circular sigue los mismos pasos que los dados para
eliminar un nodo en una lista lineal. Hay que enlazar el nodo anterior con el siguiente al
que se desea eliminar y liberar la memoria que ocupa. El algoritmo es el siguiente:
1. Búsqueda del nodo.
2. Enlace del nodo anterior con el siguiente.
3. En caso de que el nodo a eliminar sea el de acceso a la lista, lc, se modifica lc para
que tenga la dirección del nodo anterior.
4. Por último, liberar la memoria ocupada por el nodo.
ELIMINAR UN
ELEMENTO
Supongamos una lista enlazada circular de 3 nodos. Los casos de eliminación se
detallan a continuación:
∙ Eliminar el elemento actual
∙ Eliminación después de un elemento.
ELIMINAR AL PRINCIPIO/
FINAL
1. Atraviese hasta el primer nodo desde el último nodo.
2. Para eliminar desde el final, debe haber solo un paso transversal, desde el último
nodo hasta el primer nodo.
3. Elimine el enlace entre el último nodo y el siguiente.
4. Vincula el último nodo al siguiente elemento del primer nodo.
5. Libera el primer nodo.
ELIMINAR AL PRINCIPIO/
FINAL
Configuración existente
Paso 1
Retire el enlace circular
ELIMINAR AL PRINCIPIO/
FINAL
Paso 2
Eliminar el vínculo entre el primero y el siguiente, vincular el último nodo al nodo
siguiente al primero.
Paso 3
Liberar/desasignar el primer nodo
ELIMINACION DESPUÉS DE UN
NODO
1. Ubíquese en el nodo a eliminar.
2. Elimine el vínculo anterior y posterior
3. Vaya al siguiente nodo y coloque un puntero en el nodo anterior al nodo a eliminar.
(que el nodo siguiente tenga como puntero anterior al nodo anterior a ser
eliminado)
4. Conecte el nodo anterior al nodo a eliminar al nodo posterior, utilizando su
puntero siguiente. (el puntero siguiente del nodo anterior ahora debe apuntar al
nodo siguiente del nodo a eliminar)
5. Libere el nodo actual (desvinculado).
ELIMINACIÓN DESPUÉS DE UN
NODO
Paso 1
Digamos que necesitamos eliminar un nodo con "VALOR1".
Paso 2
Elimine el vínculo entre el nodo anterior y el nodo actual. Vincula su nodo anterior con
el siguiente nodo señalado por el nodo actual (con VALOR1).
ELIMINACIÓN DESPUÉS DE UN
NODO
Paso 3
Liberar o desasignar el nodo actual.
RECORRER UNA LISTA
CIRCULAR
Una operación común de todas las estructuras enlazadas es recorrer o visitar todos los
nodos de la estructura. En una lista circular el recorrido puede empezar en cualquier
nodo, a partir de uno dado procesa cada nodo hasta alcanzar el nodo de partida.
EJEMPLO
4.10
Este ejemplo muestra un código que ilustra todas las posibles operaciones en una
lista circular simplemente enlazada.
EJEMPLO
4.10
EJEMPLO
4.10
EJEMPLO
4.10
LISTA CIRCULAR DOBLEMENTE
ENLAZADA
Es un tipo de lista enlazada donde cada nodo está conectado a su nodo anterior y al
siguiente, y el ultimo nodo se vincula al primero. Esta estructura permite un recorrido
bidireccional eficiente y la realización de bucles a través de la lista.
EJERCICIO
4.11
Este código muestra la creación de una lista circular doblemente enlazada, la inserción de
nodos y el despliegue de la lista.
EJERCICIO
4.11
EJERCICIO
4.11
EJERCICIO
4.12
Este código muestra la búsqueda de un nodo en una lista circular doblemente enlazada.
EJERCICIO
4.12
EJERCICIO
4.12
EJERCICIO
4.12
EJERCICIO
4.13
Este código muestra la modificación del dato de un nodo en una lista circular doblemente
enlazada.
EJERCICIO
4.13
EJERCICIO
4.13
EJERCICIO
4.13
EJERCICIO
4.14
Este código muestra la eliminación de un nodo en una lista circular doblemente enlazada.
EJERCICIO
4.14
EJERCICIO
4.14
EJERCICIO
4.14
EJERCICIO
4.14
Gracias
por su
atención