2016-06-20 13:25:01 -04:00
|
|
|
package cl.cromer.estructuras;
|
|
|
|
|
2016-07-02 18:04:18 -04:00
|
|
|
import java.util.Random;
|
|
|
|
|
2016-06-20 13:25:01 -04:00
|
|
|
/**
|
|
|
|
* Crear una estructura de dato de tipo pila.
|
2016-06-29 00:33:19 -04:00
|
|
|
*
|
2016-06-20 13:25:01 -04:00
|
|
|
* @author Chris Cromer
|
|
|
|
*/
|
2016-06-26 13:25:51 -04:00
|
|
|
final public class Pila {
|
2016-07-03 11:28:26 -04:00
|
|
|
/**
|
|
|
|
* La pila.
|
|
|
|
*/
|
|
|
|
private String pila[];
|
2016-06-20 13:25:01 -04:00
|
|
|
|
2016-07-03 11:28:26 -04:00
|
|
|
/**
|
|
|
|
* La cantidad de elementos en la pila.
|
|
|
|
*/
|
|
|
|
private int size;
|
2016-06-20 13:25:01 -04:00
|
|
|
|
2016-07-03 11:28:26 -04:00
|
|
|
/**
|
|
|
|
* Inicializar.
|
|
|
|
*/
|
|
|
|
public Pila() {
|
|
|
|
pila = null;
|
|
|
|
size = 0;
|
|
|
|
}
|
2016-06-20 13:25:01 -04:00
|
|
|
|
2016-07-03 11:28:26 -04:00
|
|
|
/**
|
|
|
|
* Pop un valor de encima de la pila.
|
|
|
|
*
|
|
|
|
* @return boolean: Verdad si fue exitoso.
|
|
|
|
*/
|
|
|
|
public boolean pop() {
|
|
|
|
if (this.pila != null && size() > 0) {
|
|
|
|
String pila[] = new String[this.pila.length - 1];
|
|
|
|
System.arraycopy(this.pila, 0, pila, 0, pila.length);
|
|
|
|
this.pila = pila;
|
|
|
|
size--;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2016-06-20 13:25:01 -04:00
|
|
|
|
2016-07-03 11:28:26 -04:00
|
|
|
/**
|
|
|
|
* Devolver la cantidad de elementos en la pila.
|
|
|
|
*
|
|
|
|
* @return int: La cantidad de elementos.
|
|
|
|
*/
|
|
|
|
public int size() {
|
|
|
|
return size;
|
|
|
|
}
|
2016-07-02 18:04:18 -04:00
|
|
|
|
2016-07-03 11:28:26 -04:00
|
|
|
/**
|
|
|
|
* Peek al valor que está encima de la pila.
|
|
|
|
*
|
|
|
|
* @return int: El valor que está encima de la pila.
|
|
|
|
*/
|
|
|
|
public int peek() {
|
|
|
|
if (pila != null && size() > 0) {
|
|
|
|
return Integer.valueOf(pila[pila.length - 1]);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return Integer.MIN_VALUE;
|
|
|
|
}
|
|
|
|
}
|
2016-06-20 13:25:01 -04:00
|
|
|
|
2016-07-03 11:28:26 -04:00
|
|
|
/**
|
|
|
|
* Devolver el valor que está en un indice de la pila.
|
|
|
|
*
|
|
|
|
* @param indice int: El indice que desea devolver.
|
|
|
|
*
|
|
|
|
* @return String: El valor que está guardado en el indice.
|
|
|
|
*/
|
|
|
|
public String getIndice(int indice) {
|
|
|
|
if (pila != null && indice >= 0 && indice < pila.length) {
|
|
|
|
return pila[indice];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
2016-07-02 18:04:18 -04:00
|
|
|
|
2016-07-03 11:28:26 -04:00
|
|
|
/**
|
|
|
|
* Llenar la pila con valores al azar.
|
|
|
|
*/
|
|
|
|
@SuppressWarnings("Duplicates")
|
|
|
|
public void llenar() {
|
|
|
|
Random random = new Random();
|
|
|
|
int maximo = 99;
|
|
|
|
int minimo = 0;
|
|
|
|
int rango = maximo - minimo + 1;
|
2016-07-02 18:04:18 -04:00
|
|
|
|
2016-07-03 11:28:26 -04:00
|
|
|
for (int i = size(); i < 10; i++) {
|
|
|
|
int numero = random.nextInt(rango) + minimo;
|
|
|
|
push(numero);
|
|
|
|
}
|
|
|
|
}
|
2016-07-02 18:04:18 -04:00
|
|
|
|
2016-07-03 11:28:26 -04:00
|
|
|
/**
|
|
|
|
* Push un valor en la pila encima.
|
|
|
|
*
|
|
|
|
* @param valor int: El valor a push.
|
|
|
|
*/
|
|
|
|
public void push(int valor) {
|
|
|
|
if (this.pila != null) {
|
|
|
|
String pila[] = new String[this.pila.length + 1];
|
|
|
|
int i;
|
|
|
|
for (i = 0; i < this.pila.length; i++) {
|
|
|
|
pila[i] = this.pila[i];
|
|
|
|
}
|
|
|
|
pila[i] = String.valueOf(valor);
|
|
|
|
this.pila = pila;
|
|
|
|
size++;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
String pila[] = new String[1];
|
|
|
|
pila[0] = String.valueOf(valor);
|
|
|
|
this.pila = pila;
|
|
|
|
size++;
|
|
|
|
}
|
|
|
|
}
|
2016-06-20 13:25:01 -04:00
|
|
|
}
|