Вы находитесь на странице: 1из 28

TIPOS ABSTRACTOS DE DATOS TAD LISTA

LISTAS ENLAZADAS, DOBLEMENTE ENLAZADAS, CIRCULARES Y DOBLEMENTE CIRCULARES

Universidad Don Bosco


Facultad de Ingeniera
Escuela de Ingeniera en Computacin
Docente: Carmen Celia Morales Samayoa
INTRODUCCIN

Al contrario que las estructuras de datos estticas (arrays, vectores y tablas) en las que su
tamao en memoria se establece durante la compilacin y permanece inalterable durante la
ejecucin del programa, las estructuras de datos dinmicas crecen y se contraen a medida que
se ejecuta el programa.

Las estructuras dinmicas son generadas mediante un tipo de dato conocido con el nombre de
puntero. Una variable de tipo puntero almacena la direccin o posicin de otra variable,
variable dinmica, y la principal ventaja que representa manejar punteros es que se pueden
adquirir posiciones de memoria a medida que se vayan necesitando y liberarlas cuando ya no se
requieren.
CONTINUACIN

Una estructura de datos dinmica es una coleccin de elementos llamados NODOS,


normalmente de tipo registro, que se enlazan o encadenan unos con otros. El enlace se
establece gracias a que cada nodo contiene al menos un elemento de tipo puntero que
apunta a otro nodo de la estructura.

Estos punteros permiten el cambio y la liberacin de las posiciones de memoria que


tienen asociados y, de esta manera, la estructura dinmica puede modificar su tamao
en tiempo de ejecucin. Existen diferentes tipos de estructura dinmicas de datos,
siendo las ms notables y significativas las listas enlazadas, los rboles, y los grafos.
TADS

No
Lineales
Anteriormente definamos un TAD lineales
como un conjunto de valores sobre los
que se aplica un conjunto dado de
operaciones que cumplen determinadas
Listas rboles
propiedades, y que adems son creados
por el programador. Ahora bien los TAD
se dividen en: TAD Lineales, TAD No Pilas Grafos
Lineales.

Colas
LISTAS
DEFINICIN

Una lista enlazada es una coleccin o secuencia de elementos lineal de estructuras auto
referenciadas llamadas nodos, en la que cada elemento se conecta al siguiente elemento
por un enlace a travs de enlaces de apuntador o puntero, de ah el trmino lista
enlazada.

La idea bsica consiste en construir una lista cuyos elementos, llamados nodos, se
componen de dos partes (campos): la primera parte contiene la informacin y es, por
consiguiente, un valor de un tipo genrico (denominado Dato, TipoElemento, Info, etc.),
y la segunda parte es un enlace que apunta al siguiente nodo de la lista.
Se tiene acceso a una lista enlazada va un apuntador al primer nodo de la lista. Se
puede tener acceso a los nodos subsecuentes va el apuntador de enlace almacenado
en cada nodo. Por regla convencional, para marcar el fin de la lista, el apuntador de
enlace, en el ltimo nodo de una lista, se define a NULL.

En una lista enlazada los datos se almacenan dinmicamente, cada nodo se crea
conforme sea necesario (es por ello que suelen llamarse estructuras dinmicas). Un
nodo puede contener datos de cualquier tipo, incluyendo otras struct.
VENTAJAS

Las listas enlazadas son apropiadas cuando no es predecible de inmediato el nmero


de elementos de datos a representarse en la estructura.

Las listas enlazadas son dinmicas, por lo que conforme sea necesario la longitud de
una lista puede aumentar o disminuir. Por su parte, el tamao de un arreglo no puede
ser modificado, porque la memoria del arreglo es asignada en tiempo de compilacin.

Los arreglos pueden llenarse. Las listas enlazadas slo se llenan cuando el sistema no
tiene suficiente memoria para satisfacer las solicitudes de asignacin dinmica de
almacenamiento.
REPRESENTACIN GRFICA

CABEZA COLA
CLASIFICACIN DE LAS LISTAS

Lista simplemente enlazada


Lista doblemente enlazada
Lista circular simplemente enlazada
Lista circular doblemente enlazada
CARACTERSTICAS DE LAS LISTAS

Las inserciones se pueden realizar por cualquier punto de la lista. Por la cabeza (inicio),
por el final (cola), o a partir o antes de un nodo determinado de la lista.
Las eliminaciones tambin se pueden realizar en cualquier punto de la lista; adems se
eliminan nodos dependiendo del campo de informacin o dato que se desea suprimir
de la lista.
OPERACIONES
Insertar. Aade un elemento en cualquier posicin de la lista. Si esta operacin tiene xito, se devuelve el valor
booleano verdadero; en otro caso, se devuelve el valor booleano falso.
Aadir. Aade un elemento a la cola de la lista. Si esta operacin tiene xito, se devuelve el valor booleano
verdadero; en otro caso, se devuelve el valor booleano falso.
Obtener. Devuelve el elemento almacenado en cierta posicin de la lista o el valor nulo si la posicin no existe.
Eliminar. Elimina un elemento almacenado en cierta posicin de la lista. Si esta operacin tiene xito, se
devuelve el valor booleano verdadero; en otro caso, se devuelve el valor booleano falso.
Longitud. Devuelve la longitud de la lista.
Inicio. Sita la posicin actual de la lista a la cabeza.
Actual. Devuelve la posicin actual de la lista.
Siguiente. Incrementa la posicin actual de la lista y devuelve su valor. Es decir que recorre la lista.
LISTA SIMPLEMENTE ENLAZADA

La forma ms simple de estructura dinmica es la lista simplemente enlazada o abierta. En esta


forma los nodos se organizan de modo que cada uno apunta al siguiente, y el ltimo no apunta
a nada, es decir, el puntero del nodo siguiente vale NULL.

Consideraciones:
En esta lista existe un nodo especial: el primero. Normalmente diremos que nuestra lista es
un puntero a ese primer nodo y llamaremos a ese nodo la cabeza de la lista.
Cuando el puntero que usamos para acceder a la lista vale NULL, diremos que la lista est
vaca.
DEFINICIN DEL NODO DE LA LISTA

class NodoLista {
private object datos;
public object Datos { get { return datos; } set { datos = value; } }
private NodoLista siguiente;
public NodoLista Siguiente { get { return siguiente; } set { siguiente = value; } }
DEFINICIN DEL NODO DE LA LISTA

public NodoLista(object valorDatos) : this(valorDatos, null) { }


public NodoLista(object valorDatos, NodoLista siguienteNodo)
{
datos = valorDatos;
siguiente = siguienteNodo; }
} // fin de la clase
REPRESENTACIN GRFICA DE LOS NODOS

CONSTRUCTOR 1

DATO PUNTERO NULL

CONSTRUCTOR 2

DATO PUNTERO SIGUIENTE


CONSTRUCCIN DE LA LISTA

class Lista {
private NodoLista primerNodo;
private NodoLista ultimoNodo;
private string nombre;

public Lista(string nombreLista) {


nombre = nombreLista;
primerNodo = ultimoNodo = null; } // fin del constructor

public Lista( ) : this("lista) { } // fin del constructor predeterminado }


REPRESENTACIN GRFICA

LISTA POR DEFECTO

NOMBRE

PRIMER NODO = ULTIMO NODO = NULL


INSERCIN EN UNA LISTA

El nuevo elemento que se desea incorporar a una lista se puede insertar de distintas formas, segn la
posicin o el punto de insercin. Este 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.
Despus de un elemento especificado.
INSERCIN AL FRENTE

public void InsertarAlFrente(object insertarElemento)


{
if (EstaVacia())
primerNodo = ultimoNodo = new NodoLista(insertarElemento);
else
primerNodo = new NodoLista(insertarElemento, primerNodo);
}
INSERTAR AL FINAL

public void InsertarAlFinal(object insertarElemento)


{
if (EstaVacia())
primerNodo = ultimoNodo = new NodoLista(insertarElemento);
else
ultimoNodo = ultimoNodo.Siguiente = new NodoLista(insertarElemento);
}
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:
Bsqueda del nodo que contiene el dato. Se ha de obtener la direccin del nodo a eliminar y
la direccin del anterior.
El enlace del nodo anterior que apunte al nodo siguiente al que se elimina.
Si el nodo a eliminar es el cabeza de la lista (primero), se modifica primero para que tenga la
direccin del siguiente nodo.
Por ltimo, la memoria ocupada por el nodo se libera.
ELIMINAR AL FRENTE
public object EliminarDelFrente()
{
if (EstaVacia())
throw new ExcepcionListaVacia(nombre);

object eliminarElemento = primerNodo.Datos; //Esta lnea es la almacena lo que borro


//Reestableciendo el puntero al primer elemento
if (primerNodo == ultimoNodo)
primerNodo = ultimoNodo = null;
else
primerNodo = primerNodo.Siguiente;
return eliminarElemento;
}
ELIMINAR AL FINAL
public object EliminarDelFinal( ) {
if ( EstaVacia() )
throw new ExcepcionListaVacia( nombre );
object eliminarElemento = ultimoNodo.Datos; // obtiene los datos
// restablece las referencias primerNodo y ultimoNodos
if ( primerNodo == ultimoNodo )
primerNodo = ultimoNodo = null;
else
{
NodoLista actual = primerNodo;
while ( actual.Siguiente != ultimoNodo )
actual = actual.Siguiente; // avanza al siguiente nodo
ultimoNodo = actual;
actual.Siguiente = null; } // fin de else
return eliminarElemento; // devuelve los datos eliminados
} // fin del mtodo EliminarDelFinal
IMPRIMIR
public void Imprimir( ) {
if (EstaVacia() ) {
Console.WriteLine( nombre + " Vaca");
return; }
Console.Write( "La " + nombre + " es: " );
NodoLista actual = primerNodo;
while ( actual != null )
{
Console.Write( actual.Datos + " " );
actual = actual.Siguiente; }
Console.WriteLine( "\n" );
}
LISTAS DOBLEMENTE ENLAZADAS

2 3 5 8

Las listas doblemente enlazadas al igual que las listas simples cuentan con una serie
de operaciones y casos que permiten modificar o simplemente recorrer la lista para
obtener informacin de la misma.
La operacin de insertar un nuevo nodo en la lista debe realizar ajustes de los dos
punteros.
La operacin de eliminar un nodo de la lista doble necesita enlazar, mutuamente, el
nodo anterior y el nodo siguiente del que se borra.
LISTA CIRCULAR SIMPLEMENTE ENLAZADA Y DOBLEMENTE
ENLAZADA

La construccin de una lista circular se puede hacer con enlace simple o enlace doble
entre sus nodos.
La clase ListaCircular dispone del puntero de acceso a la lista, junto a las funciones que
implementan las operaciones.
La creacin de un nodo vara 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. La funcionalidad (la interfaz) de la clase
NodoCircular es la misma que la de un Nodo de una lista enlazada.
REPRESENTACIN GRFICA

SIMPLE

DOBLE

Вам также может понравиться