You are on page 1of 8

SEMANA 6

SESION 7
LISTAS ENLAΩADAS PARTICULARES
CONTENIDO
Definición de listas enlazadas con cabecera
Características
Operaciones sobre Listas Circulares
Definición Listas enlazadas Dobles o doblemente Enlazadas
Características
Operaciones sobre Listas Dobles

Listas enlazadas con cabecera


Definición

Una Lista enlazada con cabecera es una Lista en lazada que contiene un nodo
especial llamado nodo cabecera, se ubica al principio de la Lista
Las Listas enlazadas con cabecera se clasifican en:
- Lista con cabecera y Tierra: Es una Lista enlazada con cabecera cuyo último
nodo contiene el puntero Null (nulo)
El término “Tierra” es inutilizado más en el campo de la electricidad para
indicar la tierra de un circuito
- Lista Circular con cabecera: Es una Lista enlazada en la que el ultimo nodo
apunte hacía del modo cabecera

Representación esquemática de la Lista enlazada con cabecera y tierra

Comienzo 0
o cabecera

Tierra
Representación esquemática de la Lista circular con cabecera

Comienzo 0
o cabecera

Características
En lo sucesivo las listas con cabecera serán siempre circulares por ello el nodo
cabecera actuara como centinela o marca que indica el final de la lista.
El puntero comienzo o Cab siempre apuntara al nodo cabecera, de acuerdo
con esto se tiene que Enlace (cab) = NULL, indicará que una Lista con
cabecera y tierra está vacía, sin embargo Enlace (cab) nos indicará que la
Lista está vacía es una Lista circular. Las Listas con cabecera y las Listas
disponibles se representan en memoria como si se tratara de una Lista
enlazada normal.

Las Listas con cabecera se utilizan en lugar de las Listas en lazadas normales
debido a muchas operaciones, se pueden realizar e implementar más
fácilmente en las listas enlazadas normales debido dos propiedades siguientes:

1.- No se requiere utilizar el puntero NULL y por tanto los punteros contiene
direcciones válidas.
2.- cada nodo normal tiene un predecesor, por lo que el primer nodo es un caso
especial.

Operaciones con Listas Circularers:


Adición: Consiste en adicionar un nodo al final de la Lista
Recorrido: Consiste en recorrer cada elemento de la Lista por única vez
Búsqueda: Consiste en localizare un elemento determinado a partir de un
valor
- Búsqueda por valor
- Búsqueda por posición
Inserción: Consiste en añadir un elemento en alguna posición
determinada
Eliminación: Consiste en eliminar un elemento en alguna pasión
determinada
Ordenación: Consiste en ordenar los elementos de acuerdo a un orden
lógico determinado.

Ejemplo de Lista Enlazada circular:

Sea una Lista Circular que contiene el archivo de personal de una empresa
organizado como una Lista con cabecera, donde LUG = 5, es la posición del
registro cabecera y por tanto Cab = 5

Como Ruiz es el último empleado entonces ENLACE ( 10) = 5, se puede tratar


este archivo como una Lista enlazada con cabecera o circular. Por ejemplo el
NSS (5 ) = 9, este indica el número total de empleados y el SALARIO TOTAL a
pagar es de 77,500 es la suma de salarios a pagar a todos los empleados de
la empresa.

La Lista circular tiene 14 elementos es como sigue:


Principio:
5 N°lug NOMBRE NSS SEXO SUELDO ENLACE
1 Diaz 200 M 1000 12
2 Kent 299 M 2000 7
3 Gonazales 408 M 2500 14
4 11
5 18000
999
6 Bravo 205 F 2500 9
Disponible 7 Lopez M 2000 10
:2 8 507 4
9 Contreras 410 M 3000 1
10 Ruiz 290 F 2000 5
11 13
12 Elcano 800 M 1000 3
13 0
14 Herrera 901 F 2000 2

En este caso de listas circulares para referirse al nodo cabecera y su posición


se indicará Enlace (cab9 y no solo Cab como en las listas enlazadas normales.
Se utilizará variables punteos Ptr para recorrer la Lista circular
Ptr 0 enlace (cab) y no Ptr = cab

Y termina el recorrido cuando Ptr = cab


Y no cuando Ptr = NULL
Pseudocodigo de Recorrido en una Lista Enlazada Circular

Acción Recorrido_Lista_Circular(cab, Enlace, Val, Ptr)


Inicio
Ptr = Enlace (cab) ……… Se iniciativa el puntero Ptr
Mientras (Ptr < > cab)
Escribir Val(Ptr)
Ptr = Enlace (Ptr). …….. Ptr apunta al siguiente nodo
Fin Mientras
Fin

Supongamos que se tiene en Memoria una Lista enlazada con cabecera


almacenada y nos dan una determinada información de un determinado
elemento a buscar

Pseudocodigo de Búsqueda de un elemento en una posición determinada

Accion Búsqueda_Lista_Circular( inf, Enlace, cab, elemento, LUG)


Inicio
La lista Es circular con cabecera
Se trata de Encontrar la posición LUG que ocupa el primer
nodo
en el que elemento aparece por primera vez
O devuelve en caso contrario LUG = NULL

Ptr = Enlace (cab). …………Se inicializa el puntero Ptr


Mientras (inf (Ptr) < > elemento ⋀ Ptr < > elemento)
Ptr = Enlace ( Ptr). ……….Ptr apunta al siguiente nodo
Si (inf (Ptr) = elemento)
LUG = Ptr
Sino
LUG = NULL
FinSi
FinMientras
Fin
Eliminación de un nodo en una lista enlazada circular
Dada una lista enlazada circular eliminar un nodo que se encuentre en una
posición determinada

Pseudocodigo de eliminar un nodo de una lista circular

Accion Eliminar Nodo_lista- Circular ( inf enlace, cab, elemento, disp)


Inicio
Es una Lista circular con cabecera
Para encontrar la posición determinada llamar a ENCLISTC ( inf,
Enlace, cab, elemento, LUG, LUGP)
Si (LUG = NULL)
Escribir “Elemento no se encuentra en la Lista”
sino
Enlace (LUGP) = Enlace (LUG) ………….. Borra el nodo
Enlace (LUG) = disp ………….El nodo eliminad pasa a
Disponible
disp = LUG
FinSi
Fin

Pseudocodigo de la Acción Encontrar posición en la Lista circular

Accion ENCLISTC (inf, cab, elemento, LUG, LUGP)


Inicio
aux = cab
Ptr = Enlace (cab). ……………. Inicializa el puntero Ptr
Mientras (inf (Ptr) < > elemento ^ Ptr < > cab)
aux = Ptr
Ptr = Enlace (Ptr ) …………. Actualizar punteros
Fin Mientras
Si (inf (Ptr ) = elemento)
LUG = Ptr
LUGP = aux
Sino
LUG = NULL
LUGP = aux
FinSi
Fin
LISTAS DOBLES O LISTAS DOBLEMENTE ENLAZADAS
Una lista enlazada simple presenta el problema de acceder a un nodo
antecesor. La única forma es de empezar desde la cabecera y explorar la lista
hasta llegar al nodo.
Una solución a este problema es es añadir un apuntador adicional a cada nodo
que contenga la dirección del nodo anterior.

Es decir el Nodo de una Lista enlazada doble esta dividido en tres partes:
1. Campo de información INFO que contiene el dato del nodo N
2. Un campo puntero SGTE que contiene la dirección del siguiente nodo de la
Lista
3. Un campo puntero ANT que contiene la posición del nodo anterior en la
Lista.

Puntero INFO Puntero


ANT SGTE

ademas la Lista Enlazada doble requiere de dos punteros


- Primero o cabecera: apunta al primer nodo de la Lista
- Ultimo: Indica que es el último nodo de la Lista

Primero 0

Ultimo
Cada nodo puede implementarse como un registro

Registro Nodo
Inicio
T valor ………….. Valor del Nodo de tipo T
Nodo. *PS. …………….. Puntero al sucesor o SGTE
Nodo. *PA. …………….. Puntero al anterior
Fin

Operaciones con Listas Enlazadas Dobles:

Pseudocodigo de la Inserción de un nodo en una Lista Enlazada doble

Acción Inserción_LD (V, D)


Inicio
n = nuevo_nodo
n —> valor = V
n --->PS = D—>PS
( D—>PS) —> PA = n
n ---> PA = D
D —> PS = n
Fin

Eliminación de un Nodo en una Lista Enlazada Doble

Pseudocodigo de la eliminación de un Nodo en una Lista Enlazada Doble

Accion eliminación_ LD (V, D)


Inicio
V = D—> valor
( D —>PA)—> PS = D—> PS
( D —> PS)—>PA = D —> PA
Fin

You might also like