Sei sulla pagina 1di 23

Listas

Enlazadas
Listas.
Definicin:
Una lista es una coleccin de elementos llamados
generalmente nodos. El orden entre los nodos se establece por medio
de punteros, es decir, direcciones o referencias a otros nodos.

Estructura de un nodo.

Informacin Liga

En general, un nodo consta de dos partes:


a). Un campo Informacin:- Que ser de tipo de datos que se quiera
almacenar en la lista.
b). Un campo Liga:- Se utiliza para establecer la liga o el enlace con
otro nodo de la lista.
Listas
P
Por ejemplo:

Garca Prez Lpez Santos

NIL
Clasificacin de Listas.
Una listas se pueden clasificar en :
a) Simples.
b) Dobles.
c) Circulares.
d) Multilistas.
Lista Simplemente enlazada

Definicin:
Una lista de enlace simple es una lista enlazada de nodos,
donde cada nodo tiene un nico campo de enlace. Una variable de
referencia contiene una referencia al primer nodo, cada nodo (excepto
el ltimo) enlaza con el nodo siguiente, y el enlace del ltimo nodo
contiene null para indicar el final de la lista. Aunque normalmente a la
variable de referencia se la suele llamar top, usted puede elegir el
nombre que quiera. La siguiente figura presenta una lista de enlace
simple de tres nodos, donde top referencia al nodo A, A conecta con B y
B conecta con C y C es el nodo final. Por ejemplo:

Top A B C

NIL
Lista Simplemente enlazada.

Las operaciones que pueden llevarse a cabo en una lista son:


1.- Creacin.
2.- Insercin de un elemento.
3.- Borrado de un elemento.
4.- Bsqueda de un elemento.
5.- Recorrido de la lista.
Lista Simplemente enlazada.

Operacin de Creacin.
Permite crear un nodo al inicio de la lista, y posteriormente se
podrn agregar mas nodo a la misma. Para la creacin de esta puede
presentarse de la siguiente manera.
1. Creacin al inicio.
2. Creacin al final.

CreaInicio( P)
{ Este algoritmo crea una lista, agregando cada nuevo nodo al inicio de la misma}

{ P y Q son variables de tipo puntero. P apuntara al inicio de la lista }

1.- Crea ( P)
2.- Leer P^Informacion
3.- Hacer P^Liga Nil
4.- Repetir
5.- Crea ( Q )
6.- Leer Q^Informacion
7.- Hacer Q^Liga P,P Q
8.- Hasta( que ya no haya informacin )
Lista Simplemente enlazada.

CreaFinal( P)
{ Este algoritmo crea una lista, agregando cada nuevo nodo al final de la misma}

{ P y T, Q son variables de tipo puntero. P apuntara al inicio de la lista }

1.- Crea ( P)
2.- Leer P^Informacion
3.- Hacer P^Liga Nil y T P
4.- Repetir
5.- Crea ( Q )
6.- Leer Q^Informacion
7.- Hacer Q^Liga Nil, T^Liga Q y T Q
8.- Hasta( que ya no haya informacin )
Lista Simplemente enlazada.

Operacin de Insercin.
La operacin de insercin consiste en agregar un nuevo nodo
a la lista. No se considerar el caso de lista vaca, sino que se
supondr que la lista en la cual se va a insertar el nuevo nodo ya
existe. Se puede presentar cuatro casos en la operacin de insercin:
1. Insertar un nodo al inicio de la lista.
2. Insertar un nodo al final de la lista.
3. Insertar un nodo antes que otro.
4. Insertar un nodo despus que otro.

Insertar un nodo al inicio de la lista.


El nuevo nodo se coloca al principio de la lista, convirtindose
en el primero de la misma. El proceso es relativamente simple, aparece
descrito de la siguiente manera.
Lista Simplemente enlazada.

InsertarInicio( P, Dato)
{ Este algoritmo inserta un nodo al inicio de la lista. P es el apuntador al primer nodo de
la lista, y Dato es la informacin que se almacenar en el nuevo nodo}

{ Q son variables de tipo puntero. }

1.- Crea ( Q)
2.- Hacer Q^Informacion Dato
3.- Hacer Q^Liga P y P Q

Insercin al final de la lista.


El nuevo nodo se coloca al final de la lista, convirtindose en
el ultimo de la misma. Esto puede ser descrito de la siguiente manera:
Lista Simplemente enlazada.

InsertarFinal( P, Dato)
{ Este algoritmo inserta un nodo al final de la lista. P es el apuntador al primer nodo de la
lista, y Dato es la informacin que se almacenar en el nuevo nodo}

{ Q y T son variables de tipo puntero. }

1.- Hacer T P
2.- Repetir mientras T^Liga Nil
3.- Hacer T T^Liga
4.- Fin_repetir
5.- Crea ( Q )
6.- Hacer Q^informacion Dato, Q^Liga Nil y T^Liga Q

Insercin de un nodo antes que otro.


El nuevo nodo se coloca antes de otro nodo dado como
referencia. Primero se analiza el caso de insercin precedido a un
nodo. Esto es descrito de la siguiente manera :
Lista Simplemente enlazada.
InsertarAntes( P, Dato, Ref)
{ Este algoritmo inserta un nodo antes de un nodo dado como referencia, Ref . P es el
apuntador al primer nodo de la lista, y Dato es la informacin que se almacenar en el
nuevo nodo}

{ Q , X y T son variables de tipo puntero. Band es una variable de tipo booleano }

1.- Hacer Q P y Band Verdadero


2.- Repertir mientras ( Q^informacion Ref) y ( Band = Verdadero)
3.- Si Q^Liga Nil entonces
4.- Hacer T Q y Q Q^Liga
5.- Sino
6.- Hacer Band Falso
7.- Fin _si
8.- Fin_Repetir
9.- Si Band=Verdadero entonces
10.- Crea ( X )
11.- Hacer X^informacion Dato
12.- Si P= Q entonces
13.- Hacer X^Liga P y P X
14.- Sino
15.- Hacer T^Liga X y X^Liga Q
16.- Fin_si
17.- Fin_si
Lista Simplemente enlazada.

Borrado de un elemento.
Consiste en quitar un nodo de la lista, redefiniendo las ligas
correspondan. Se pueden presentar cuatro caso en esta operacin:

1.Eliminar el primer nodo.


2.Eliminar el ultimo nodo.
3.Eliminar un nodo con informacin X.
4.Eliminar el nodo anterior/posterior al nodo con informacin X.

Eliminar el primer nodo.


Se quita el primer nodo de la lista, redefiniendo el valor del
puntero al nuevo de la misma. El proceso es muy sencillo. Aparece
descrito en el algoritmo.
Lista Simplemente enlazada.

EliminaPrimero( P)
{ Este algoritmo borra el primer elemento de una lista. P es el apuntador al primer nodo
de la lista. }

{ Q son variables de tipo puntero. }

1.- Hacer Q P
2.- Si Q^Liga Nil entonces
3.- Hacer P Q^Liga
4.- Sino
5.- Hacer P Nil
6.- Fin_si
7.- Quitar (Q)

Eliminar el ultimo nodo.


Se quita el ultimo nodo de la lista, redefiniendo a Nil el campo
liga de su predecesor. Para alcanzar el ultimo nodo se deber recorrer
previamente toda la lista, excepto si se usara un puntero indicando el
final de la misma. Aparece descrito en el algoritmo.
Lista Simplemente enlazada.

EliminaUltimo( P)
{ Este algoritmo borra el ultimo elemento de una lista. P es el apuntador al primer nodo de
la lista. }

{ Q y T son variables de tipo puntero. }

1.- Si P^Liga Nil entonces


3.- Quitar(P)
4.- Hacer P Nil
5.- Sino
6.- Hacer Q P
7.- Repetir mientras(Q^Liga Nil)
8.- Hacer T Q,Q Q^Liga
9.- Fin_Repetir
10.- Hacer T^Liga Nil
11.- Quitar (Q)
12.- Fin_si
Lista Simplemente enlazada.

Eliminar uno nodo que contenga la informacin X.


Se debe buscar al nodo que contenga la informacin
dada como referencia (X) y eliminarlo, estableciendo la liga
correspondiente entre su predecesor y su sucesor. El siguiente
algoritmo describe este proceso.
EliminaX( P , X )
{ Este algoritmo elimina un nodo con informacin X de una lista. P es el apuntador al
primer nodo de la lista. }

{ Q y T son variables de tipo puntero, Band es una variable de tipo booleano }

1.- Hacer Q P y Band Verdadero


3.- Repetir mientras( Q^informacion X) y (Band=Verdadero)
4.- Si Q^Liga Nil entonces
5.- Hacer T Q,Q Q^Liga
6.- Sino
7.- Hacer Band Falso
8.- Fin_si
9.- Fin_Repetir
10.- Si Band = Falso entonces
11.- Escribir El elemento no fue encontrado Continuacin
Lista Simplemente enlazada.

12.- Sino
13.- Si P=Q entonces
14.- Hacer P Q^Liga
15.- Sino
16.- Hacer T^Liga Q^liga
17.- Fin_si
18.- Quitar ( Q )
19.- Fin_si

Eliminar el nodo anterior al nodo con informacin X.


Dado un nodo como referencia se debe eliminar su
predecesor, estableciendo las ligas correspondiente. Se describe el
algoritmo siguiente.
Lista Simplemente enlazada.

EliminantesX( P , X )
{ Este algoritmo elimina un nodo anterior al nodo que contiene a X . P es el apuntador al
primer nodo de la lista. }

{ Q , T y R son variables de tipo puntero, Band es una variable de tipo booleano }

1.- Si P^informacion=X entonces


2.- Escribir No hay nodo que precede a X
3.- Si no
4. - Hacer Q P, T P y Band Falso
5.- Repetir mientras( Q^informacion X) y (Band=Falso)
6.- Si Q^Liga Nil entonces
7.- Hacer R T, T Q,Q Q^Liga
8.- Sino
9.- Hacer Band Verdadero
10.- Fin_si
11.- Fin_Repetir
12.- Si Band = Verdadero entonces
13.- Escribir El elemento no fue encontrado
14.- Si no
15.- Si P^Liga= Q entonces
16.- Quitar( P ) Continuacin
Lista Simplemente enlazada.

17.- Hacer P Q
18.- Sino
19.- Hacer R^Liga Q
20.- Quitar ( T )
21.- Fin_Si
22.- Fin_Si
23.- Fin_Si

Bsqueda de un elemento.
La operacin de bsqueda de un elemento en una lista se
realiza de modo secuencial. Se deben recorrer los nodos, tomando el
campo Enlace como puntero al siguiente nodo a visitar. Debido a esto
puede decirse que esta operacin esta implcita en algunos de los
casos de insercin y eliminacin.
Lista Simplemente enlazada.

Buscar( P , X )
{ Este algoritmo busca al elemento con informacion X, en una lista. P es el apuntador al
primer nodo de la lista. }

{ Q es una variable de tipo puntero, Band es una variable de tipo booleano }

1.- Hacer Q P, Band Verdadero


2.- Repetir mientras( Q^informacion X) y (Band=Verdadero)
3.- Si Q^Liga Nil entonces
4.- Hacer Q Q^Liga
5.- Sino
6.- Hacer Band Falso
7.- Fin_Si
8.- Fin_Repetir
9.- Si Band = Falso entonces
10.- Escribir El elemento no fue encontrado
11.- Si no
12.- Escribir El elemento esta en la lista
13.- Fin_Si
Lista Simplemente enlazada.

Recorrido de la lista
La operacin de recorrido consiste en visitar cada uno de los
nodos que forman la lista. La visita de un nodo puede definirse por
medio de una operacin muy simple ( por ejemplo la impresin de la
informacin del mismo), o por medio de operaciones complejas como
se desee.

Recorrido( P )
{ Este algoritmo recorre una lista cuyo primer nodo esta apuntado por P. }

{ Q es una variable de tipo puntero }

1.- Hacer Q P
2.- Repetir mientras( Q Nil)
3.- Escribir Q^Informacion
4.- Hacer Q Q^Liga
5.- Fin_Repetir
Listas Circulares.

Definicin:
Las listas circulares tienen la caracterstica de que el ultimo
elemento de la misma apunta al primero. Las operaciones en listas
circulares son similares a las operaciones en listas lineales, en el caso
de la operacin de recorrido de listas circulares, es necesario aclarar
que se debe considerar algn criterio para detectar cuando se ha
visitado todos los nodos para evitar caer en ciclos infinito. Una posible
solucin consiste en usar un nodo extra, llamado nodo de cabecera ,
para indicar el inicio de la lista. Este nodo contendr informacin
especial, de tal manera que se distinga de los dems y as podr hacer
referencia al principio de la lista. Por ejemplo:

A B C D
Listas Doblemente Ligadas

Definicin:
Una lista doblemente ligada es una coleccin de nodos, en la
cual cada nodo tiene dos punteros, uno de ellos apuntando a su
predecesor y otro a su sucesor. Por medio de estos punteros se podra
avanzar o retroceder a travs de la lista, segn se tomen las
direcciones de uno u otro puntero.
Estructura de un nodo

LigaIzq Informacin LigaDer

Por ejemplo:

A B C D

NIL NIL
Listas Doblemente Ligadas Circulares

Definicin:
En las Listas doblemente ligadas circulares, el campo liga
izquierda del primer nodo de la lista apuntara al ultimo, y el campo liga
derecha de este apunta al primero. La principal ventaja de las listas
circulares es que permite la navegacin en cualquier sentido a travs de
la misma y adems, se puede recorrer toda la lista partiendo de
cualquier nodo. Sin embargo, debemos hacer notar que se deben
establecer condiciones adecuadas para detener el recorrido de una lista
para evitar caer en ciclos infinitos. Lo mismo que en el caso de listas
lineales suele usarse un nodo de cabecera. Este nodo tendr las
caractersticas descritas anteriormente, y servir como referencia para
detectar cuando se ha recorrido totalmente la lista. Por ejemplo:

A B C D

Potrebbero piacerti anche