Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 2.1 - Pilas, Colas y Listas
Tema 2.1 - Pilas, Colas y Listas
Colas
Listas
Facultad de Informatica
Universidad de A Coruna
Algoritmos
Pilas
Colas
Listas
Table of Contents
Pilas
Pseudocodigo
Codigo J AVA
Colas
Pseudocodigo
Codigo
J AVA
Listas
Pseudocodigo
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Table of Contents
Pilas
Pseudocodigo
Codigo J AVA
Colas
Pseudocodigo
Codigo
J AVA
Listas
Pseudocodigo
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Pilas
Operaciones basicas:
apilar, desapilar y cima.
desapilar o cima en una pila vaca es un error en el TDA pila.
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Codigo
J AVA: Interfaz Pila
BLICAS
// OPERACIONES PU
// void apilar(x) ->Inserta x
// void desapilar() ->Elimina el
ultimo elemento insertado
// Object cima() ->Devuelve el
ultimo elemento insertado
// boolean esVacia() ->Devuelve true si vac
a, sino false
// void vaciar() ->Elimina todos los elementos
// ERRORES: cima o desapilar sobre la pila vac
a
public interface IPila {
void apilar(Object x);
void desapilar() throws Exception;
Object cima() throws Exception;
boolean esVacia();
void vaciar();
}
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Codigo
J AVA: Clase PilaVec (i)
import java.util.*;
public class PilaVec implements IPila {
private Vector p;
private int cimaDePila;
static final int CAPACIDAD_POR_DEFECTO = 10;
public PilaVec() {
p = new Vector(CAPACIDAD_POR_DEFECTO);
cimaDePila = -1;
}
public boolean esVacia() {
return (cimaDePila == -1);
}
public void vaciar() {
cimaDePila = -1;
}
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Codigo
J AVA: Clase PilaVec (ii)
public void apilar(Object x) {
if (++cimaDePila == p.size()) p.add(x);
else p.set(cimaDePila, x);
}
public void desapilar() throws Exception {
if (esVacia()) throw new Exception("pila vac
a");
cimaDePila--;
}
public Object cima() throws Exception {
if (esVacia()) throw new Exception("pila vac
a");
return p.get(cimaDePila);
}
}
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Table of Contents
Pilas
Pseudocodigo
Codigo J AVA
Colas
Pseudocodigo
Codigo
J AVA
Listas
Pseudocodigo
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Colas
Operaciones basicas:
insertar, quitarPrimero y primero.
Cada rutina debera ejecutarse en tiempo constante.
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
final
1) Crear Cola (C)
cabeza
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
final
1) Crear Cola (C)
cabeza
final
a
cabeza
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
final
1) Crear Cola (C)
cabeza
final
a
cabeza
a
cabeza
Algoritmos
final
b
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
a
cabeza
Algoritmos
final
c
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
a
cabeza
final
c
a
cabeza
Algoritmos
final
d
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
a
cabeza
final
c
a
cabeza
final
d
final
d
b
cabeza
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
a
cabeza
final
c
a
cabeza
final
d
b
cabeza
final
d
b
cabeza
final
e
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Pseudocodigo
(i)
tipo Cola = registro
Cabeza_de_cola, Final_de_cola: 1..Tama
no_m
aximo_de_cola
Tama
no_de_cola : 0..Tama
no_m
aximo_de_cola
Vector_de_cola : vector [1..Tama
no_m
aximo_de_cola]
de Tipo_de_elemento
fin registro
procedimiento Crear_Cola ( C )
C.Tama
no_de_cola := 0;
C.Cabeza_de_cola := 1;
C.Final_de_cola := Tama
no_m
aximo_de_cola
fin procedimiento
funci
on Cola_Vac
a ( C ) : test
devolver C.Tama
no_de_cola = 0
fin funci
on
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Pseudocodigo
(ii)
procedimiento incrementar ( x ) (* privado *)
si x = Tama
no_m
aximo_de_cola entonces x := 1
sino x := x + 1
fin procedimiento
procedimiento Insertar_en_Cola ( x, C )
si C.Tama
no_de_Cola = Tama
no_m
aximo_de_cola entonces
error Cola llena
sino
C.Tama
no_de_cola := C.Tama
no_de_cola + 1;
incrementar(C.Final_de_cola);
C.Vector_de_cola[C.Final_de_cola] := x;
fin procedimiento
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Pseudocodigo
(iii)
funci
on Quitar_Primero ( C ) : Tipo_de_elemento
si Cola_Vac
a ( C ) entonces
error Cola vac
a
sino
C.Tama
no_de_cola := C.Tama
no_de_cola - 1;
x := C.Vector_de_cola[C.Cabeza_de_cola];
incrementar(C.Cabeza_de_cola);
devolver x
fin funci
on
funci
on Primero ( C ) : Tipo_de_elemento
si Cola_Vac
a ( C ) entonces
error Cola vac
a
sino
devolver Vector_de_cola[C.Cabeza_de_cola]
fin funci
on
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Codigo
J AVA: Interfaz Cola
BLICAS
// OPERACIONES PU
// void insertar(x) -> Inserta x
// Object primero() -> Devuelve el primer elemento
// Object quitarPrimero() -> Devuelve y elimina el primer el
// boolean esVacia() -> Devuelve true si vac
a, si no false
// void vaciar() -> Elimina todos los elementos
// ERRORES: primer y quitarPrimero sobre una cola vac
a
public interface ICola {
void insertar(Object x);
Object primero() throws Exception;
Object quitarPrimero() throws Exception;
boolean esVacia();
void vaciar();
}
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Codigo
J AVA: Clase ColasVec (i)
public class ColaVec implements ICola {
private Object [] vector;
private int tamanoActual;
private int cabezaDeCola;
private int finalDeCola;
static final int CAPACIDAD_POR_DEFECTO = 10;
public ColaVec() {
vector = new Object[CAPACIDAD_POR_DEFECTO];
vaciar();
}
public void vaciar() {
tamanoActual = 0;
cabezaDeCola = 0;
finalDeCola = -1;
}
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Codigo
J AVA: Clase ColaVec (ii)
public boolean esVacia() {
return (tamanoActual == 0);
}
public Object primero() throws Exception {
if (esVacia()) throw new Exception("cola vac
a");
return vector[cabezaDeCola];
}
private int incrementar(int x) {
if (++x == vector.length)
x = 0;
return x;
}
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Codigo
J AVA: Clase ColaVec (iii)
public Object quitarPrimero() throws Exception {
if (esVacia())
throw new Exception("cola vac
a");
tamanoActual--;
Object valorDevuelto = vector[cabezaDeCola];
cabezaDeCola = incrementar(cabezaDeCola);
return valorDevuelto;
}
public void insertar(Object x) {
if (tamanoActual == vector.length)
duplicarCola();
finalDeCola = incrementar(finalDeCola);
vector[finalDeCola] = x;
tamanoActual++;
}
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
Codigo
J AVA: Clase ColaVec (iv)
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Codigo
J AVA
de la duplicacion
del vector
Amortizacion
se realiza
Cuando el vector no se duplica, toda operacion
en tiempo constante.
con duplicacion
es O (N ).
La complejidad de una insercion
de un vector de N elementos esta precedida,
La duplicacion
al menos, por N /2 inserciones que no duplican el vector.
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Table of Contents
Pilas
Pseudocodigo
Codigo J AVA
Colas
Pseudocodigo
Codigo
J AVA
Listas
Pseudocodigo
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Listas
Operaciones basicas:
Visualizar su contenido.
de la primera ocurrencia de un elemento.
Buscar la posicion
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
de la lista.
Tiene que declararse el tamano
Exige sobrevaloracion.
Consume mucho espacio.
La construccion
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
y la eliminacion
al comienzo
Un nodo cabecera facilita la insercion
de la lista.
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Algoritmos
Pilas
Colas
Listas
Pseudocodigo
Pilas
Colas
Listas
Pseudocodigo
Pilas
Colas
Listas
Pseudocodigo
Pilas
Colas
Listas
Pseudocodigo
procedimiento Insertar ( x, L, p )
es de la posici
on p }
nuevo ( tmp );
{ Inserta despu
si tmp = nil entonces
error Memoria agotada
sino
tmp.Elemento := x;
tmp.Siguiente := p.Siguiente:
p.Siguiente := tmp
fin procedimiento
Algoritmos