Escolar Documentos
Profissional Documentos
Cultura Documentos
Estructuras de datos
vEstructuras bsicas
Arreglo
Lista enlazada
Simplemente enlazada
Doblemente enlazada
25-05-14
Arreglo
vEs una coleccin ordenada de elementos del
mismo tipo.
vEs de largo fijo, definido al momento de
instanciarlo.
vEl acceso a los elementos se hace a travs de un
subndice.
vFcil de recorrer en ambos sentidos.
vEstudiado en cursos anteriores
25-05-14
Listas enlazadas
vSon estructuras dinmicas: se asigna memoria
para los elementos de la lista en la medida que es
necesario.
vCada elemento se almacena en una variable
dinmica denominada nodo.
vEn la lista simplemente enlazada, cada nodo
apunta al nodo que contiene el elemento siguiente
25-05-14
Nodos
data
data
head
data
null
ListaEnlazada
data
25-05-14
25-05-14
1..1
head
agregarAlFinal(d:Data)
estContenido(d:Data):boolean
eliminar(d:Data):boolean
imprimirContenido()
Nodo
data:int
getData():int
setNext(n:Nodo)
getNext():Nodo
Nodo(d:Data,n:Nodo)
vDiagrama de objetos:
:Lista
head:Nodo
data = 1
25-05-14
:Nodo
:Nodo
data = 20
data = -1
25-05-14
25-05-14
vInsertar elementos:
Al final de la lista
25
14
head
null
Manteniendo un orden
1
14
25
head
null
Al inicio de la lista
4
14
head
Franco Guidi Polanco (PUCV-EII)
25
null
25-05-14
10
head
head
null
null
public Lista{
...
public void agregarAlFinal(int dato){
...
head = new Nodo( dato, null );
...
}
...
}
Franco Guidi Polanco (PUCV-EII)
25-05-14
11
head
null
aux
25
14
head
null
aux
12
...
}
Franco Guidi Polanco (PUCV-EII)
25-05-14
13
Recorrido de la lista
vMtodo que imprime el contenido de la lista:
public class Lista{
...
public void imprimirContenido(){
Nodo aux = head;
while( aux != null ){
System.out.print( aux.getData() + "; " );
aux = aux.getNext();
}
System.out.println();
...
25-05-14
14
Bsqueda en la lista
vRetorna true si el elemento est contenido en la
lista
public class Lista{
...
public boolean estaContenido(int data){
Nodo aux = head;
while( aux != null ){
if( data == aux.getData() )
return true;
aux = aux.getNext();
}
return false;
}
...
}
Franco Guidi Polanco (PUCV-EII)
25-05-14
15
Eliminacin de un elemento
vRequiere identificar el nodo a borrar.
vCaso 1: es el primer nodo de la lista
25
14
head
null
head = head.getNext();
25
head
14
head
Franco Guidi Polanco (PUCV-EII)
14
null
null
25-05-14
16
Eliminacin de un elemento
vCaso 2 (general): no es el primer nodo de la lista
25
14
head
null
aux.setNext(aux.getNext().getNext());
aux
25
head
head
Franco Guidi Polanco (PUCV-EII)
14
null
null
25-05-14
17
Eliminacin de un elemento
public class Lista{
...
public boolean eliminar(int data){
if( head != null)
if( head.getData() == data ){
head = head.getNext();
return true;
}else{
Nodo aux = head;
while( aux.getNext() != null ){
if( aux.getNext().getData() == data ){
aux.setNext( aux.getNext().getNext() );
return true;
}
aux = aux.getNext();
}
}
return false;
}
...
}
Franco Guidi Polanco (PUCV-EII)
25-05-14
18
25-05-14
19
vLista vaca:
head
...
null
Valor irrelevante
25
head
null
Primer elemento de la lista
25-05-14
20
head
null
aux
Clase
Lista
25-05-14
21
aux
aux.setNext(aux.getNext().getNext());
14
head
null
Sin otras referencias: candidato a eliminacin
(recolector de basura de Java)
25-05-14
22
25-05-14
23
25-05-14
24
1..1
agregarAlFinal(d:Data)
estContenido(d:Data)
eliminar(d:Data):boolean
imprimirContenido()
head
1..1
1..1
tail
Nodo
data: int
getData():Data
setNext(n:Nodo)
getNext():Nodo
Nodo(d:Data,n:Nodo)
vDiagrama de objetos:
Lista
head
ghost:Nodo
1stNode:Nodo
2ndNode:Nodo
data = 20
data = -1
tail
25-05-14
25
head
null
tail
...
}
25
head
null
tail
Franco Guidi Polanco (PUCV-EII)
25-05-14
26
Versin con
nodo fantasma
25-05-14
27
25-05-14
28
25-05-14
29
14
head
null
null
25-05-14
30
25
14
head
25-05-14
31
25-05-14
33
Listas
v Representa una coleccin conformada por una secuencia finita y
ordenada de datos denominados elementos.
v Ordenada implica que cada elemento tiene una posicin.
v Los elementos corresponden a un tipo de dato.
v La lista est vaca cuando no contiene elementos.
v El nmero de elementos se denomina largo de la lista.
v El comienzo de la lista es llamado cabeza (head), y el final cola
(tail).
v Notacin: (a1, a2, ..., an).
25-05-14
34
25-05-14
35
25-05-14
36
25-05-14
37
vOperaciones:
miLista.insert(99) :
miLista=(12, 99, 22, 50, 30)
miLista.next():
Dato actual
25-05-14
38
25-05-14
39
25-05-14
40
vInterfaz extendida:
Implementacin basada en arreglos
Implementacin basada en lista doblemente enlazada
Implementacin basada en lista simplemente enlazada
25-05-14
41
25-05-14
42
Insertar 23
13 12 20
0
(a)
13 12 20
(b)
23 13 12 20
(c)
Franco Guidi Polanco (PUCV-EII)
25-05-14
43
25-05-14
44
25-05-14
45
Uso de listas
vSupongamos las siguientes implementaciones de la lista:
LList, implementa List mediante una lista
simplemente enlazada
AList, implementa List mediante un arreglo
vReferenciamos la lista por medio de su interfaz:
...
List lista = new LList(); // Implementacin seleccionada
lista.insert( Hola );
lista.insert( chao );
lista.setFirst();
while( !lista.eol() ){
System.out.println( (Sring)lista.currValue());
lista.next();
}
lista.setFirst();
String eliminado = (String) lista.remove()
...
Franco Guidi Polanco (PUCV-EII)
25-05-14
46
25-05-14
47
Pilas
vEs un tipo restringido de lista, en donde los
elementos slo pueden ser insertados o removidos
desde un extremo, llamado top.
vSe le llama tambin Stack o Lista LIFO (Last In,
First Out).
vLa operacin para insertar un nuevo elemento se
denomina push.
vLa operacin para remover un elemento se denomina
pop.
25-05-14
48
25-05-14
49
vpila.push(14):
top
vpila.push(1):
1
14
4
top
14
4
vpila.pop():
1
top
14
4
25-05-14
top
(nuevo)
50
null
pila.push(4)
4
top
pila.push(14)
14
null
Se inserta y remueve
siempre el primer
elemento:
no se requiere nodo
fantasma
top
null
pila.pop()
4
top
Franco Guidi Polanco (PUCV-EII)
null
25-05-14
51
top=4
25-05-14
52
Ejercicio pilas
vProponga implementaciones de la pila:
Basada en un arreglo
Basada en una lista simplemente enlazada
25-05-14
53
Colas
vEs un tipo restringido de lista, en donde los
elementos slo pueden ser agregados al final, y
removidos por el frente.
vSe le llama tambin Queue o Lista FIFO (First In,
First Out).
vLa operacin para agregar un nuevo elemento se
denomina enqueue.
vLa operacin para remover un elemento se denomina
dequeue.
25-05-14
54
25-05-14
55
cola=(20)
v cola.enqueue( 15 )
cola=(20, 15)
v cola.enqueue( 40 )
cola=(15, 40)
v cola.dequeue()
20
cola=(40)
15
Franco Guidi Polanco (PUCV-EII)
25-05-14
56
25
null
front
rear
25-05-14
57
rear=2
25-05-14
58
rear=3
25-05-14
59
front=0
5
8
2
4
2
rear=3
25-05-14
Funcin de avance
Dados:
pos: posicin actual
size: tamao arreglo
pos=(pos+1);
if (pos>=size)
pos=0;
60
25-05-14
61
25-05-14
62