Tema3_Pilas_Implemen..

Anuncio
Pilas
Implementación con gestión
estática de memoria
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Esquema general
cima = 2
12
2
1
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Esquema general
cima = 3
7
12
2
1
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Esquema general
cima = 2
12
1
2
12
2
0
1
2
...
n
1
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Esquema general
cima = 3
7
cima = 2
12
1
2
12
7
2
0
1
2
3
...
1
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Esquema general
Desapilar sólo implica
actualizar la cima
cima = 3
7
cima = 2
12
1
2
12
7
2
0
1
2
3
...
1
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Esquema general
cima = 3
7
cima = 2
12
1
2
12
7
2
0
1
2
3
...
1
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Esquema general
●
Caso especial.
–
Pila vacía.
...
-1
0
1
Estructuras de Datos y de la Información
2
3
n
ESI – Curso 2010/2011
Implementación :: Interfaz
public interface Pila<X> {
public boolean esVacia ();
public void apilar (X v)
throws DesbordamientoPilaException;
public void desapilar ()
throws PilaVaciaException;
public X cima ()
throws PilaVaciaException;
public String toString ();
public boolean equals (Object o);
}
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: Pila Estática
// Pila con reserva de memoria estática.
class PilaEstatica<X> implements Pila<X> {
// Elementos de la pila.
private X[] _elementos;
// Capacidad de la pila.
private int _maxElementos;
// Cima de la pila.
private int _cima;
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: Constructores
public PilaEstatica (int maxElementos) {
_cima = -1;
_maxElementos = maxElementos;
// Java no permite arrays
// de tipos genéricos.
_elementos = (X[])new Object[_maxElementos];
}
public PilaEstatica () {
_cima = -1;
_maxElementos = 10;
_elementos = (X[])new Object[_maxElementos];
}
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: Constructores
public PilaEstatica (int maxElementos) {
_cima = -1;
_maxElementos = maxElementos;
// Java no permite arrays
// de tipos genéricos.
_elementos = (X[])new Object[_maxElementos];
}
public PilaEstatica () {
_cima = -1;
_maxElementos = 10;
_elementos = (X[])new Object[_maxElementos];
}
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: esVacía ()
public boolean esVacia () {
return _cima == -1;
}
...
-1
0
1
Estructuras de Datos y de la Información
2
3
n
ESI – Curso 2010/2011
Implementación :: apilar ()
public void apilar (X v)
throws DesbordamientoPilaException {
try {
// Actualizamos la cima.
// Almacenamos en la pila el valor v.
_elementos[++_cima] = v;
}
catch (ArrayIndexOutOfBoundsException ex) {
System.err.println(ex.toString());
throw new DesbordamientoPilaException
("La pila alcanza el tamaño: " +
_maxElementos);
}
}
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: apilar ()
●
Incrementar el valor de cima.
●
Almacenar el nuevo contenido en la pila.
...
-1
0
1
Estructuras de Datos y de la Información
2
3
n
ESI – Curso 2010/2011
Implementación :: apilar ()
public void apilar (X v)
throws DesbordamientoPilaException {
try {
// Actualizamos la cima.
// Almacenamos en la pila el valor v.
_elementos[++_cima] = v;
}
catch (ArrayIndexOutOfBoundsException ex) {
System.err.println(ex.toString());
throw new DesbordamientoPilaException
("La pila alcanza el tamaño: " +
_maxElementos);
}
}
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: apilar ()
public void apilar (X v)
throws DesbordamientoPilaException {
try {
// Actualizamos la cima.
// Almacenamos en la pila el valor v.
_elementos[++_cima] = v;
}
catch (ArrayIndexOutOfBoundsException ex) {
System.err.println(ex.toString());
throw new DesbordamientoPilaException
("La pila alcanza el tamaño: " +
_maxElementos);
}
}
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: desapilar ()
1
2
12
7
0
1
2
3
Estructuras de Datos y de la Información
...
n
ESI – Curso 2010/2011
Implementación :: desapilar ()
1
2
12
7
0
1
2
3
Estructuras de Datos y de la Información
...
n
ESI – Curso 2010/2011
Implementación :: desapilar ()
public void desapilar ()
throws PilaVaciaException {
if (esVacia())
throw new PilaVaciaException();
else
// Actualizamos la cima.
// No es necesario modificar _elementos.
_cima--;
}
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: desapilar ()
public void desapilar ()
throws PilaVaciaException {
if (esVacia())
throw new PilaVaciaException();
else
// Actualizamos la cima.
// No es necesario modificar _elementos.
_cima--;
}
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: desapilar ()
public void desapilar ()
throws PilaVaciaException {
if (esVacia())
throw new PilaVaciaException();
else
// Actualizamos la cima.
// No es necesario modificar _elementos.
_cima--;
}
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: cima ()
public X cima () throws PilaVaciaException {
if (esVacia())
throw new PilaVaciaException();
else
return _elementos[_cima];
}
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: cima ()
public X cima () throws PilaVaciaException {
if (esVacia())
throw new PilaVaciaException();
else
return _elementos[_cima];
}
...
-1
0
1
Estructuras de Datos y de la Información
2
3
n
ESI – Curso 2010/2011
Implementación :: cima ()
public X cima () throws PilaVaciaException {
if (esVacia())
throw new PilaVaciaException();
else
return _elementos[_cima];
}
1
2
12
7
0
1
2
3
Estructuras de Datos y de la Información
...
n
ESI – Curso 2010/2011
Implementación :: equals ()
public boolean equals (Object o) {
boolean iguales = o instanceof PilaEstatica;
int n = 0;
// Si tenemos una pila distinta a la actual.
if (iguales && this != o) {
// Comparamos la longitud de las pilas.
iguales =
(_cima == ((PilaEstatica)o)._cima);
// ...
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: equals ()
Pila p
cima = 2
Pila aux
12
cima = 2
12
2
2
1
1
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: equals ()
public boolean equals (Object o) {
boolean iguales = o instanceof PilaEstatica;
int n = 0;
// Si tenemos una pila distinta a la actual.
if (iguales && this != o) {
// Comparamos la longitud de las pilas.
iguales =
(_cima == ((PilaEstatica)o)._cima);
// ...
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: equals ()
Pila p
cima = 2
Pila aux
12
cima = 2
12
2
13
1
1
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: equals ()
public boolean equals (Object o) {
// ...
// Si tenemos una pila distinta a la actual.
if (iguales && this != o) {
// ...
}
}
// Comparamos mientras los elementos
// vayan siendo iguales.
while (iguales && n <= _cima) {
iguales = _elementos[n].equals(
((PilaEstatica)o)._elementos[n]);
n++;
}
return iguales;
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: equals ()
public boolean equals (Object o) {
// ...
// Si tenemos una pila distinta a la actual.
if (iguales && this != o) {
// ...
}
}
// Comparamos mientras los elementos
// vayan siendo iguales.
while (iguales && n <= _cima) {
iguales = _elementos[n].equals(
((PilaEstatica)o)._elementos[n]);
n++;
}
return iguales;
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Implementación :: equals ()
public boolean equals (Object o) {
// ...
// Si tenemos una pila distinta a la actual.
if (iguales && this != o) {
// ...
}
}
// Comparamos mientras los elementos
// vayan siendo iguales.
while (iguales && n <= _cima) {
iguales = _elementos[n].equals(
((PilaEstatica)o)._elementos[n]);
n++;
}
return iguales;
Estructuras de Datos y de la Información
ESI – Curso 2010/2011
Descargar