Igor Goicovic Donoso, De La Dura Infancia, De La Ardiente Vida Igor Goicovic
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
-
Upload
domitila-ferrera -
Category
Documents
-
view
112 -
download
0
Transcript of Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
![Page 1: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/1.jpg)
Programación IIPilas
Igor Santos Grueiro
![Page 2: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/2.jpg)
De este tipo de pilas
NO vamos a hablar
![Page 3: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/3.jpg)
¿Qué es una pila?
![Page 4: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/4.jpg)
Tengo una pila de fichas
![Page 5: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/5.jpg)
Tengo una pilade trabajos
![Page 6: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/6.jpg)
Tengo una pila de galletas
![Page 7: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/7.jpg)
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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/8.jpg)
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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/9.jpg)
Podemos hacer varias operaciones:
![Page 10: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/10.jpg)
Crear una pila
![Page 11: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/11.jpg)
Objeto
Vaciar una pila
Objeto
![Page 12: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/12.jpg)
Objeto
Comprobar sí una pila está vacía
Objeto
NOSÍ
![Page 13: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/13.jpg)
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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/14.jpg)
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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/15.jpg)
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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/16.jpg)
Vamos a construirla clase o tipo pila
![Page 17: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/17.jpg)
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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/18.jpg)
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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/19.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/20.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/21.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/22.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/23.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/24.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/25.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/26.jpg)
Ya dominamos un tipo de pila
![Page 27: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/27.jpg)
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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/28.jpg)
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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/29.jpg)
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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/30.jpg)
Ahora la clase PilaDinamica
![Page 31: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/31.jpg)
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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/32.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/33.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/34.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/35.jpg)
Cima Cima
![Page 36: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/36.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/37.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/38.jpg)
Cima Cima
![Page 39: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/39.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/40.jpg)
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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/41.jpg)
//…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.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/42.jpg)
Y, ¿para qué sirven las pilas?
![Page 43: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/43.jpg)
Podemos implementar recursividad
![Page 44: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/44.jpg)
Podemos evaluar
expresiones matemáticas
![Page 45: Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.](https://reader036.fdocuments.co/reader036/viewer/2022062623/5528bde5497959977d8fceab/html5/thumbnails/45.jpg)
Las pilas son una estructura fundamental
de la computación