Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Listas
Listas Arrays
Listas
Operaciones
Insertar,
Tipos de listas
Simples
Ordenadas Pilas
Colas
Doblemente Circulares
enlazadas (LDE)
2
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
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.
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
Eliminar Nodos
Casos 1 Eliminar el primer nodo
Entonces
15
16
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
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
Filas Dinmicas
21
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 direccin del siguiente nodo El apuntador puede ser null o puede apuntar al siguiente nodo Esta estructura se utiliza en : Simulaciones Sistemas operativos etc
22
dato sig
dato sig
dato sig
dato sig
Crearfila (nodo inicio) Agregarfila (nodo inicio, int dato) QuitarFila (nodo inicio) Vacio (nodo inicio)
23
Clase nodo
public class Nodo { int dato; // 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.
24
Crea fila
creaFila (nodo i){ nodo inicio = new nodo(); inicio = i; }
incio sig
25
null
dato sig
27
Sino
Regresa vacia
}
incio sig
Pilas Dinmicas
29
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)
30
31
}
nuevo incio sig dato sig dato sig dato sig null
32
Sino
Regresa vacia
}
incio sig dato sig dato sig dato sig
34
35
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
36
sig ant
Inicio
fin
37
38
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
39
Dato
Dato
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
40
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
41
null
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
eliminaMedio(nodo) 1-. Si nodo apunta a Lista Lista=siguiente 2-. nodo= siguiente 3-. Nodo = anterior 4-. Borramos el nodo apuntado por nodo
44
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
o insertar elementos. Buscar o localizar elementos. Borrar elementos. Moverse a travs de la lista
48
Insertar un elemento
Insertar elemento en la lista vaca
Hacemos que nodo = siguiente apunte a lista = siguiente. Despus que lista = siguiente apunte a nodo.
49
lista = siguiente mientras lista = siguiente sea distinto de nodo. Hacemos que lista = siguiente apunte a nodo = siguiente. Eliminamos el nodo.
Borramos el nodo apuntado por lista. Hacemos que lista valga NULL.
50
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.
51