igor santos grueiro. de este tipo de pilas no vamos a hablar

45
Programación II Pilas Igor Santos Grueiro

Upload: domitila-ferrera

Post on 11-Apr-2015

108 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Programación IIPilas

Igor Santos Grueiro

Page 2: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

De este tipo de pilas

NO vamos a hablar

Page 3: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

¿Qué es una pila?

Page 4: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Tengo una pila de fichas

Page 5: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Tengo una pilade trabajos

Page 6: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Tengo una pila de galletas

Page 7: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Objeto

Una pila es una estructura formada por una secuencia de 0 a N elementos, en la que se extraen los elementos en orden inverso al de inserción

Objeto

Pila

Apilar/Push Desapilar/Pop

Cima de la pila

Page 8: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

En un pila sólo se hacen operaciones con la cima de la pila

Es un tipo de estructura LIFO (Last Input First Output)

Page 9: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Podemos hacer varias operaciones:

Page 10: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Crear una pila

Page 11: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Objeto

Vaciar una pila

Objeto

Page 12: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Objeto

Comprobar sí una pila está vacía

Objeto

NOSÍ

Page 13: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Obtener una copia del elemento en la cima

Objeto

Objeto

Objeto

Page 14: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Insertar un elemento en la cima

Objeto

Objeto

Objeto

Se conoce como apilar o “push”

Page 15: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Recoger y eliminar de la pila el elemento cima

Objeto

Objeto

Se conoce como desapilar o “pop”

Page 16: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Vamos a construirla clase o tipo pila

Page 17: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Una pila se puede construir:

De forma estática De forma dinámica

Page 18: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

De forma estática: la pila tiene un tamaño fijo

public class PilaEstatica {private Object [] elementos;

private int cont;

public PilaEstatica(int tamaño){elementos = new Object[tamaño];cont = 0;for (int i=0; i< elementos.length; i++){

elementos [i] = null;}

}//…

}

Page 19: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public void vaciar(){

for (int i = 0; i < this.contador; i++){ this.elementos[i] = null;

}}//…

Para vaciar ponemos a null los elementos insertados

Page 20: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public boolean estaVacia(){

return (cont == 0);}//…

Para comprar si está vacía miramos al contador

Page 21: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public void push(Object x){

if (cont != this.elementos.length){this.elementos[cont] = x;cont++;

} else {System.out.println(“Error, Pila llena”);

}}//…

Para insertar un elemento se añade al array en la posición del contador

Page 22: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public Object cima(){

if (cont > 0){return this.elementos[cont -

1];}else{

return null;} }//…

Para devolver el elemento en la cima se mira la posición

del contador

public Object cima(){ return v[cont-1]; }

Page 23: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public Object borrar(){

if (cont != 0){this.cont--;this.elementos[cont] = null;

}else{System.out.println(“Error, la pila esta vacia”);

}}//…

Para borrar el elemento en la cima se pone a null la

posición del contador (-1)

public Object cima(){ return v[cont-1]; }

Page 24: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public Object pop(){

if (cont == 0){return null;

} else {cont--;Object temp = this.elementos[cont] ;this.elementos[cont] = null;return temp;

}}//…

Para desapilar el elemento en la cima se recupera y se borra el

elemento de la cima

public Object cima(){ return v[cont-1]; }

Page 25: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public int tamanyo(){

return cont;}//…

También, podemos recuperar el número de elementos

insertados en la pila

public Object cima(){ return v[cont-1]; }

Page 26: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Ya dominamos un tipo de pila

Page 27: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Pero, ¿y cuándo no sabemos

cuántos elementos vamos a insertar?

Page 28: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Nos hace falta una estructura que enlace un elemento al siguiente

Object elementoNodo siguiente

Nodo

Page 29: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

public class NodoPilaDinamica{private Object elemento;

private NodoPilaDinamica siguiente;

public NodoPilaDinamica(Object elemento, NodoPilaDinamica siguiente){

this.elemento = elemento;this.siguiente = siguiente;

}

public NodoPilaDinamica(Object elemento){this.elemento = elemento;this.siguiente = null;

}public Object getElemento(){

return elemento;}public NodoPilaDinamica getSiguiente(){

return siguiente;}

}

}

Page 30: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Ahora la clase PilaDinamica

Page 31: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

public class PilaDinamica{private NodoPilaDinamica cima;

private int cont;

public PilaDinamica(){this.cima = null;this.cont = 0;

}//…

}

}

Page 32: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public void vaciar(){

this.cima = null;this.cont = 0;

}//…

Para vaciar ponemos a null la cima

Page 33: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public boolean estaVacia(){

return (this.cima == null); }//…

Para comprobar si está vacía miramos si la cima es null

Page 34: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public void push(Object x){

this.cima = new NodoPilaDinamica(x, this.cima);this.cont++;

}//…

Para insertar un elemento se añade un elemento como siguiente de

la cima y se actualiza la cima

Page 35: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Cima Cima

Page 36: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public Object cima(){

if (this.cima != null){return this.cima.getElemento();

} else {return null;

}}//…

Para devolver el elemento en la cima se devuelve el elemento de la cima

public Object cima(){ return v[cont-1]; }

Page 37: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public void borrar(){

if (this.cima != null){this.cima = this.cima.getSiguiente();this.cont--;

}}//…

Para borrar el elemento en la cima se pone la cima al valor siguiente de la cima previa

public Object cima(){ return v[cont-1]; }

Page 38: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Cima Cima

Page 39: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public Object pop(){

if (this.cima == null){return null;

} else {this.cont--;NodoPilaDinamica nodoTmp = this.cima;this.cima = this.cima.getSiguiente();return nodoTmp.getElemento();

}}//…

Para desapilar el elemento en la cima se recupera y se borra el

elemento de la cima

public Object cima(){ return v[cont-1]; }

Page 40: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Cima Cima

Se devuelve el objeto contenido en el nodo

Objeto

Page 41: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

//…public int tamanyo(){

return cont;}//…

También, podemos recuperar el número de elementos

insertados en la pila

public Object cima(){ return v[cont-1]; }

Page 42: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Y, ¿para qué sirven las pilas?

Page 43: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Podemos implementar recursividad

Page 44: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Podemos evaluar

expresiones matemáticas

Page 45: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar

Las pilas son una estructura fundamental

de la computación