You are on page 1of 43

Listas Dinmicas

Listas

Listas Arrays
Listas

son flexibles y permiten cambio de implementacin Borrar, Modificar, etc.

Operaciones
Insertar,

Tipos de listas
Simples
Ordenadas Pilas

Colas
Doblemente Circulares

enlazadas (LDE)
2

TAD Lista Simple: operaciones


Creacin de una lista Comprobacin del estado
crearLista (nombreLista) listaLlena (nombreLista) Booleano listaVacia(nombreLista) Booleano listaVacia (referenciaNodo) Booleano Insertar (nombreLista, valorInfo, posicion) Insertar (nombreLista, valorInfo) Borrar (nombreLista, valorInfo) Buscar (nombreLista, dato) informacion Buscar (nombreLista, dato) referenciaNodo Pertenece (nombreLista,informacion) Booleano recorrer(nombreLista) Info (referenciaNodo) Informacion Siguiente (referenciaNodo) enlace asignarInfo (referenciaNodo, valorInformacion) asignarEnlace (referenciaNodo, valorEnlace)

Insercin de nodos Borrado de nodos Bsqueda de un nodo

Recorrido de la lista Acceso a los nodos Modificacin de los nodos

Definicin de la lista

Se compone de nodos enlazados. Se debe hacer en una clase separada. Slo requiere conocer dnde se encuentra el primer nodo de la lista. Para el nombre de la referencia al primer nodo se hace uso de la metfora: cabeza de la lista o inicio. Una lista vaca comenzara con un valor null en el campo sig (siguiente)

Qu es un Nodo?

Un nodo es un registro con varios campos: unos campos de datos y un campo apuntador. Los primeros son informacin y el ltimo es una referencia al siguiente nodo de la lista. El ltimo nodo de la lista contiene una referencia siguiente "null".

Clase nodo
public class Nodo { int data; // almacena el dato Nodo sig; //liga al prximo nodo }
El campo data representa los datos que almacena el nodo. Puede ser de diferentes tipos de datos, adems que ste puede contener la cantidad de datos que se ocupen.
6

Listas

sig

sig

sig

Creacin de una lista

Lista vaca

Insercin de un nodo
CASO 1. Insercin al principio de la lista

Caso 1.

Insercin al principio

Insertarinicio (inicio, info) //este algoritmo inserta un nodo al inicio de la lista// (nuevo: del tipo inicio) 1- crear (nuevo); 2- hacer nuevo.dato = info nuevo.sig = inicio inicio = nuevo
10

Caso 2.

Insercin en medio de la lista

Caso 2.1 Insertar antes de

Caso 2.2 Insertar despus de

inicio

aux
Ref

nuevo

info
11

Caso 2.1

Insertar antes de

InsertAntes (inicio, info, ref) //aux,nuevo,T son variables de tipo inicio. OK es una variable boolean 1- hacer aux = inicio, Ok = verdadero 2- mientras (aux.dato != ref) y (Ok == verdadero) Si aux.sig != null T = aux, aux = aux.sig. Sino OK = falso 3- Si Ok = = verdadero //se encontr el dato Crear (nuevo) nuevo.dato = info nuevo.sig =aux Si aux = = inicio //es el primer nodo entonces inicio = nuevo si no T.sig = nuevo

12

Caso 2.2

InsertDespues

InsertDespues (inicio, info, Ref) //nuevo y aux so n variables del tipo de inicio, OK es boolean 1- aux = inicio, OK = verdadero 2- Mientras (aux.dato != ref) y (OK == verdadero) hacer si aux.sig != null entonces aux = aux.sig si no OK = Falso 3- Si OK = = verdadero entonces crear (nuevo) nuevo.dato = info nuevo.sig = aux.sig aux.sig = nuevo
13

Caso 3. Insercin al final de la lista

Insertafinal (inicio, info) // nuevo y T son del tipo inicio


1- Hacer T = inicio 2- mientras T.sig != null recorrer la lista hasta llegar al final 3- Crear (nuevo) 4- nuevo.dato = info nuevo.sig = null T.sig = nuevo
14

Eliminar Nodos
Casos 1 Eliminar el primer nodo

Elimina primero (inicio)


// Se redefine el apuntador inicio. //aux es del tipo inicio

1- hacer Q = inicio; 2- Si aux.sig != null


//que si hay mas de un elemento

inicio = aux.sig Sino inicio = null 3- aux = null //quita aux

Entonces

15

Caso 2 Eliminar en medio


Caso 2.1 Elimina nodo con X informacin
EliminaNodoX (inicio, x) //aux y T son variables del mismo tipo de inicio, Ok es boolean 1- Hacer aux = inicio , Ok = verdadero 2- Repetir mientras (aux.dato != x) y (Ok) hacer Si aux.sig != null //hay ms nodos entonces T = aux, aux = aux.sig si no Ok = falso 3- Si Ok == falso entonces //el elemento x no existe si no si inicio == aux //x es el primer elemento de la lista entonces inicio = aux.sig si no T.sig = aux.sig aux = null

16

Caso 2.2 Elimina nodo antes de X informacin


inicio
R T

aux
X

Algoritmo EliminaAntesX (inicio, x) //aux , T y R son variables del mismo tipo de inicio (apuntador), Ok es boolean 1- Si inicio.dato == x entonces //no hay nodo que precede a x sino aux = inicio; T = inicio; Ok = falso; mientras (( aux.info!=x) y (!Ok)) si aux.sig != null entonces R = T; T = aux; aux= aux.sig; si no Ok = verdadero; 2- Si Ok entonces //el elemento x no existe si no si inicio.sig = aux //el elemento a eliminar es el primero entonces inicio = aux sino R.sig = aux; T = null;

17

Caso 3 Elimina ultimo nodo

Elimina ultimo (inicio) //Se pone un null en el campo sig del penltimo elemento y se quita el ultimo. //aux, T son del mimo tipo que inicio 1. Si inicio.sig == null //que la lista tiene un solo elemento Entonces inicio = null //quita (inicio) Si no aux = inicio 2. Mientras aux.sig != null hacer T = aux aux = aux.sig 3. T.sig = null //quita T aux = null //quita aux 18

Recorrido de una lista dinmica


Metodo Correlista (Nodo inicio); //imprime cada dato de la lista { nodo aux = new nodo(); aux = inicio; while (aux.sig != null) { escribir (aux.dato); aux = aux.sig; } }
19

Buscar un nodo con alguna caracterstica


Mtodo Busca (Nodo inicio, info){ //Devuelve exito con falso o verdadero nodo aux = new nodo(); boolean exito = falso aux = inicio; while (aux.sig != null && aux.dato != info) aux = aux.sig; if ( aux.dato = = info ) exito = verdadero; return exito }
20

Pilas Dinmicas
21

Caractersticas

Se remueve del tope y se agrega en el tope de la pila (LIFO Last In Frist Out).

Operaciones
Creapila (nodo inicio) Quitar (nodo inicio) = pop Agregar (nodo inicio, int dato) = push Vacia (nodo inicio)
22

Crear una Pila


creaPila (nodo i){ Nodo inicio = new nodo(); inicio = i }
incio sig null

23

Agregar un nodo a la Pila (push)


agregaNodo (nodo inicio, int dato){
nodo nuevo = new nodo() nuevo.dato = info nuevo.sig = inicio.sig; inicio.sig = nuevo

}
nuevo incio sig dato sig dato sig dato sig null
24

Quitar elemento de la Pila (pop)


int pop (nodo inicio){ int d = -1; Si inicio.sig == null; regresa d; Sino { d = inicio.sig.dato; inicio.sig = inicio.sis.sig; } Regresa d; }
incio sig dato sig dato sig dato sig
25

Para verificar si un apila esta vaca


Boolean vacia(nodo inicio){
Boolean vacia = false; Si inicio != null Regresa true

Sino
Regresa vacia

}
incio sig dato sig dato sig dato sig
26

Lista doblemente enlazada

27

Nodo
public class Nodo { private int data; // al macena el dato private Nodo sig; //liga al prximo nodo private Nodo ant; // liga al anterior nodo }
ant
sig

28

Operaciones de una lista doblemente enlazada


Aadir o insertar elementos. Buscar elementos. Borrar elementos. Moverse a travs de la lista, siguiente y anterior.

sig ant

Inicio

fin
29

Aadir elemento a una lista vaca

1-nodo = anterior y nodo=siguiente a NULL.

30

Insertar nuevo nodo


Caso 1 Insertar nodo en la primera posicin
Nuevo nodo

insertaNodo( nodo) 1-. Nodo=siguiente // debe apuntar a Lista. 2-. Nodo=anterior y Lista=anterior. 3-. Lista=anterior //debe apuntar a nodo.
null 1 2 Dato 3
31

Dato

Dato

Caso 2 Insertar un elemento en la ltima posicin

InsertarUltimo(nodo) 1-. Nodo=siguiente y Lista=siguiente (NULL). 2-. Lista=siguiente // debe apuntar a nodo. 3-. Nodo=anterior //apuntar a Lista.
2 Dato Dato Dato 1 3 Dato null
32

Caso 3 Insertar un nodo en medio.

InsertarMedio (nodo ) 1-. Nodo=siguiente apunte a lista=siguiente. 2-. Lista=siguiente //apunte a nodo. 3-. Nodo=anterior //apunte a lista. 4-. Nodo=siguiente=anterior // apunte a nodo.
Dato Dato 3 2 Dato 4 Dato 1
33

null

Eliminar
Caso 1 Eliminar el nico nodo
En este caso, ese nodo ser el apuntado por Lista.

1-. Eliminamos el nodo.


2-. Hacemos que Lista apunte a NULL.

34

Caso 2
Caso 2.1Eliminar el primer nodo

eliminaPrimer( nodo) 1-. Si nodo apunta a Lista // hacemos que Lista apunt Lista=siguiente. 2-. Hacemos que nodo=siguiente=anterior// apunte a NULL 3-. Borramos el nodo apuntado por nodo.

35

Caso 2.2 Eliminar un nodo intermedio

eliminaMedio(nodo) 1-. Si nodo apunta a Lista Lista=siguiente 2-. nodo= siguiente 3-. Nodo = anterior 4-. Borramos el nodo apuntado por nodo

36

Caso 3 Eliminar el ltimo nodo

eliminaUltimo(nodo) 1-. Si nodo apunta a Lista Lista=anterior. 2-nodo=anterior=siguiente apunte a NULL 3-. Borramos el nodo apuntado por nodo.

37

Lista Circular
38

Circular

Una lista circular es una lista lineal en la que el ltimo nodo a punta al primero.

inicio

fin

39

Operaciones de una lista circular


las operaciones que se pueden realizar sobre las listas circulares :
Aadir

o insertar elementos. Buscar o localizar elementos. Borrar elementos. Moverse a travs de la lista

40

Insertar un elemento
Insertar elemento en la lista vaca

lista apunta a nodo. lista->siguiente apunte a nodo.

Insertar elemento en una lista no vaca


1. 2.

Hacemos que nodo = siguiente apunte a lista = siguiente. Despus que lista = siguiente apunte a nodo.

41

Eliminar un elemento de la lista

Eliminar el nico nodo de la lista.


1. 2. 3.

lista = siguiente mientras lista = siguiente sea distinto de nodo. Hacemos que lista = siguiente apunte a nodo = siguiente. Eliminamos el nodo.

Eliminar un nodo en una lista circular con ms de un elemento


1. 2.

Borramos el nodo apuntado por lista. Hacemos que lista valga NULL.
42

Eliminar un elemento de la lista

Caso general
1. 2. 3. 4.

Copiamos el contenido del nodo = siguiente sobre el contenido de nodo. Hacemos que nodo = siguiente apunte a nodo = siguiente = siguiente. Eliminamos nodo = siguiente. Si lista es el nodo = siguiente, hacemos lista = nodo.

43

You might also like