Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Dinámicas
1
Listas
Listas ≠ Arrays
Listasson flexibles y permiten cambio de
implementación
Operaciones
Insertar, Borrar, Modificar, etc.
Tipos de listas
Simples
Ordenadas
Pilas
Colas
Doblemente enlazadas (LDE)
Circulares
2
TAD Lista Simple: operaciones
Creación de una lista crearLista (nombreLista)
Comprobación del estado listaLlena (nombreLista) → Booleano listaVacia(nombreLista) →
Booleano
listaVacia (referenciaNodo) → Booleano
Inserción de nodos Insertar (nombreLista, valorInfo, posicion)
Insertar (nombreLista, valorInfo)
Borrado de nodos Borrar (nombreLista, valorInfo)
Búsqueda de un nodo Buscar (nombreLista, dato) → informacion
Buscar (nombreLista, dato) → referenciaNodo
Pertenece (nombreLista,informacion) → Booleano
Recorrido de la lista recorrer(nombreLista)
4
¿Qué es un Nodo?
Un nodo es un registro con varios campos: unos
campos de datos y un campo apuntador. Los primeros
son información y el último es una referencia al
siguiente nodo de la lista. El último nodo de la lista
contiene una referencia siguiente "null".
5
Clase nodo
public class Nodo {
int data; // almacena el dato
Nodo sig; //”liga” al próximo nodo
}
6
Listas
7
Creación de una lista
Lista vacía
8
Inserción de un nodo
CASO 1. Inserción al principio de la lista
9
Caso 1. Inserción al principio
10
Caso 2. Inserción en medio de la lista
Ref
nuevo info
11
Caso 2.1 Insertar antes de
13
Caso 3. Inserción al final de la lista
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 más 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 información
R T aux
inicio
X
21
Características de una Fila
El primer elemento en llegar es el primero en servir
(FIFO Frist In Frist Out).
El ultimo en llegar se agrega al final
El apuntador posee la dirección del siguiente nodo
El apuntador puede ser null o puede apuntar al
siguiente nodo
22
Operaciones de una Fila
23
Clase nodo
public class Nodo {
int dato; // almacena el dato
Nodo sig; //”liga” al próximo nodo
}
24
Crea fila
25
Agregar a una Fila un nodo
Agrega(nodo inicio, int dato){
Si inicio.sig = null
entonces inicio.sig = nuevo;
Sino { nodo p = nuevo nodo();
p.sig = inicio.sig
mientas(p.sig!= null)
p = p.sig;}
}
incio sig dato sig null
26
Eliminar un elemento de la Fila
int quitar(nodo inicio){
int d = -1;
Si inicio.sig == null;
regresa d;
null
Sino {
d = inicio.sig.dato;
inicio.sig = inicio.sis.sig;
}
Regresa d;
}
incio sig dato sig dato sig dato sig
27
Vaciar una fila
28
Pilas
Dinámicas
29
Características
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)
30
Crear una Pila
creaPila (nodo i){
Nodo inicio = new nodo();
inicio = i
}
31
Agregar un nodo a la Pila (push)
32
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
33
Para verificar si un apila esta vacía
34
Lista doblemente
enlazada
35
Nodo
public class Nodo {
private int data; // al macena el dato
private Nodo sig; //”liga” al próximo nodo
private Nodo ant; // ”liga” al anterior nodo
}
ant sig
36
Operaciones de una lista doblemente enlazada
sig
ant
Inicio fin
37
Añadir elemento a una lista vacía
38
Insertar nuevo nodo
Caso 1 Insertar nodo en la primera posición
Nuevo
nodo
insertaNodo( nodo)
1-. Nodo=siguiente // debe apuntar a Lista.
2-. Nodo=anterior y Lista=anterior.
3-. Lista=anterior //debe apuntar a nodo.
1
null
2 Dato Dato Dato …
3
39
Caso 2 Insertar un elemento en la última posición
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 null
Dato
40
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 Dato null
4
3 2 1
Dato
41
Eliminar
Caso 1 Eliminar el único nodo
En este caso, ese nodo será el apuntado por Lista.
42
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.
43
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
44
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.
45
Lista
Circular
46
Circular
Una lista circular es una lista lineal en la
que el último nodo a punta al primero.
inicio
fin
47
Operaciones de una lista circular
48
Insertar un elemento
Insertar elemento en la lista vacía
lista apunta a nodo.
lista->siguiente apunte a nodo.
49
Eliminar un elemento de la lista
Eliminar el único nodo de la lista.
1. lista = siguiente mientras lista = siguiente sea distinto de nodo.
2. Hacemos que lista = siguiente apunte a nodo = siguiente.
3. Eliminamos el nodo.
50
Eliminar un elemento de la lista
Caso general
1. Copiamos el contenido del nodo = siguiente sobre el contenido
de nodo.
2. Hacemos que nodo = siguiente apunte a nodo = siguiente =
siguiente.
3. Eliminamos nodo = siguiente.
4. Si lista es el nodo = siguiente, hacemos lista = nodo.
51