Documentos de Académico
Documentos de Profesional
Documentos de Cultura
v Estructuras básicas
§ Arreglo
§ Lista enlazada
• Simplemente enlazada
• Doblemente enlazada
Nodos
v Diagrama de objetos:
head:Nodo :Nodo :Nodo
:Lista
data = 1 data = 20 data = -1
25
head head
null null
public Lista{
...
public void agregarAlFinal(int dato){
...
head = new Nodo( dato, null );
...
}
...
}
25 1 14
head
null
aux aux.setNext(new Nodo(dato, null));
Franco Guidi Polanco (PUCV-EII) 25-05-14 12
Inserción de elementos al final de la lista
v Caso general:
public class Lista{
...
public void agregarAlFinal(int dato){
Nodo nuevo = new Nodo(dato, null);
if( head == null )
head = nuevo;
else{
Nodo aux = head;
while( aux.getNext() != null)
aux = aux.getNext();
aux.setNext( nuevo );
}
}
...
}
25 1 14 4
head
null
head = head.getNext();
25 1 14 4
head
Sin otras referencias: candidato a eliminación null
(recolector de basura de Java)
1 14 4
head
null
Franco Guidi Polanco (PUCV-EII) 25-05-14 16
Eliminación de un elemento
25 1 14 4
head null
aux.setNext(aux.getNext().getNext());
aux
25 1 14 4
head
Sin otras referencias: candidato a eliminación null
(recolector de basura de Java)
25 1 4
head
null
Franco Guidi Polanco (PUCV-EII) 25-05-14 17
Eliminación 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
Simplificación del esquema propuesto: uso de un
nodo “fantasma”
v En el esquema propuesto se deben hacer
excepciones al insertar y eliminar el nodo del
comienzo de la lista.
Valor irrelevante
25 1 4
head
null
1
head null
aux aux.setNext(new Nodo(dato, null));
aux.setNext(aux.getNext().getNext());
aux
14 1 4
head
null
Sin otras referencias: candidato a eliminación
(recolector de basura de Java)
Lista Nodo
1..1
data: int
agregarAlFinal(d:Data) head
estáContenido(d:Data) getData():Data
eliminar(d:Data):boolean 1..1 1..1 setNext(n:Nodo)
imprimirContenido() getNext():Nodo
tail Nodo(d:Data,n:Nodo)
v Diagrama de objetos:
head ghost:Nodo 1stNode:Nodo 2ndNode:Nodo
Lista
data = 20 data = -1
tail
25 1 4
head
null
tail
1 14 4
head
null
null
25 1 14 4
head
§ miLista.currValue():
v Interfaz elemental:
§ Implementación basada en lista simplemente enlazada
§ Implementación basada en arreglos
§ Implementación basada en lista doblemente enlazada
(sobredimensionada)
v Interfaz extendida:
§ Implementación basada en arreglos
§ Implementación basada en lista doblemente enlazada
§ Implementación basada en lista simplemente enlazada
Insertar 23
13 12 20 8 3 13 12 20 8 3
0 1 2 3 4 5 0 1 2 3 4 5
(a) (b)
23 13 12 20 8 3
0 1 2 3 4 5
(c)
...
List lista = new AList(); // Implementación 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 47
Pilas
v pila.push(4):
v pila.push(14):
14 top
4 top 4
v pila.push(1): v pila.pop():
1
1 top
14 14 top
4 4 (nuevo)
4
top null
Franco Guidi Polanco (PUCV-EII) 25-05-14 51
Implementación de una pila mediante un arreglo
top=4
3 5 8 2
0 1 2 3 4 5
v cola.enqueue( 20 )
cola=(20)
v cola.enqueue( 15 )
cola=(20, 15)
v cola.enqueue( 40 )
cola=(40)
15
Franco Guidi Polanco (PUCV-EII) 25-05-14 56
Cola basada en lista simplemente enlazada
25 1 1 4
front null
rear
3 5 8 2
5 8 2
front=0 rear=3
3 5 8 2
5 8 2
Problema: Al sacar y agregar elementos, rear llega a la última
posición del arreglo y la cola no puede crecer, aun cuando existan
posiciones libres al comienzo.
8 pos=(pos+1);
5 2
if (pos>=size)
2 pos=0;
rear=3
4 3
v Problema: ¿Cómo reconocer cuando una cola está vacía o llena?
v Solución: Usar un arreglo de n posiciones, para almacenar como
máximo n-1 elementos.