lunes, 1 de octubre de 2012

Pilas [Java]

Hola a todos, el día de hoy vamos a hablar de una estructura de datos lineal: Las pilas, el objetivo del post no es exactamente explicar ¿Que es? ¿Para que sirve? si gustas referencias puedes leer el siguiente texto.




Algunas de las tareas básicas que se hacen con esta estructura es:


  • Agregar un dato al final
  • Eliminar el último dato
  • Checár si esta vacía la pila
  • Buscar un dato


A continuación muestro un sencillo ejemplo de como usar una Pila en Java con algunas de sus actividades: 




A continuación analizamos un poco cada parte del código:

En esta primera parte del código se están creando 2 variables que me servirán para definir el tope y el tamaño máximo del arreglo, opte por un arreglo de tipo de String para que en nuestra Pila se puedan agregar nombres.

El constructor de la clase tiene un parámetro de tipo entero m que será el que defina el tamaño total. Dentro se define que el valor de max sera el mismo de m (mas adelante se usará), y también indicamos el tamaño del arreglo de pila. Inicialmente le damos un valor de 0 a tope para que el primer dato que sea agregado al arreglo sea en dicha posición.

private int tope,max;
private String pila[];


public Pila(int m)

{
max=m;
pila=new String[max];
tope=0;
}


El método Agregar recibe un String el cual si el tope es menor que max lo agrega a nuestra pila o arreglo, de lo contrario se podría generar una excepción por sobrepasar el límite que anteriormente dimos al arreglo, mandará un aviso "Ya no caben...".


private void Agregar(String n)
{
if(tope<max)
{
pila[tope]=n;
tope++;
System.out.println("Dato agregado");
}
else
{
System.out.println("Ya no caben mas datos");
}
}

Recordemos que un elemento no puede ser eliminado de un arreglo pero en este caso en nuestro método Eliminar bastará con disminuir a tope en 1 para que simulemos que se elimina el último elemento,  pero hay una condición: tope debe ser mayor a 0 de lo contrario imaginemos que queda -1 si a futuro se agrega un dato quedará pila[-1] y esto generará una excepción. 

private void Eliminar()
{
if(tope>0)
{
tope--;
System.out.println("Dato eliminado");
}
else
{
System.out.println("Ya no hay datos para eliminar");
}
}

Antes de checár el método Mostrar es necesario entender el método Vacia. Regresa un true si esta vacía la pila y false si ya tiene algún dato <lo anterior gracias al if>.

private boolean Vacia()
{
if(pila==null) return true;
else return false;
}

El método Mostrar antes de actuar checa si hay datos en la pila para ser mostrados, de lo contrario manda un aviso, en el if indicamos SI NO esta vacía la pila <El si no es por el "!" símbolo de admiración que niega la condición > recorre con el for desde tope-1 hasta 0.

private void Mostrar()
{
if(!Vacia())
{
for(int a=(tope-1);a>=0;a--)
{
System.out.println(pila[a]);
}
}
else System.out.println("Pila vacia");
}

El método Buscar funciona de una forma muy parecida al método Mostrar ya que primero analiza si esta vació el arreglo para después en cada elemento con el ciclo for buscar el dato que se pasa como argumento, si se llega a encontrar, la variable encontrado pasara de false a true que al final sera devuelta <true significa que si fue encontrado - si existió una coincidencia en pila[a].equals(dato) [El método equals sirve para comparar 2 elementos] y false si no hay coincidencias> por el return.

private boolean Buscar(String dato)
{
boolean encontrado=false;
if(!Vacia())
{
for(int a=(tope-1);a>=0;a--)
{
if(pila[a].equals(dato)) encontrado=true;
}
}
else System.out.println("No hay datos para buscar en la pila");
return encontrado;
}

Bueno esto es todo por hoy :D espero les sea de utilidad esta publicación y recuerda dejar un comentario Suerte. Por cualquier cosa aquí esta el archivo .java y puedes descargarlo :).

    Choose :
  • OR
  • To comment
14 comentarios:
Write comentarios
  1. bientos carnal lo que andaba buscando jejeje un saludo chucho

    ResponderEliminar
  2. Felicitaciones. excelente y sobre todo la explicación. como sugerencias, mas que una sugerencia seria una petición: que el ejemplo permita el ingreso de mas datos como: el DNI, nombres, teléfono; que la búsqueda sea a través del DNI y al ser encontrado muestre el resto de la información de la persona encontrada. gracias.

    ResponderEliminar
  3. Podrías hacer uno sobre colas? ; me sirvió mucho : este .

    ResponderEliminar
  4. Podrias hacer uno pero con pila de objetos porfa

    ResponderEliminar
  5. me marca error cuando pongo el codigo "Pila pilita=new Pila(t);" en el main, como le hago?

    ResponderEliminar
  6. Gracias men, no tendrás de cola y lista?
    te lo agradecería

    ResponderEliminar
  7. Y si quiero realizar operaciones con los datos guardados en la pila?

    ResponderEliminar
  8. Todo un Maestro... Muchas gracias me fue de gran ayuda!!

    ResponderEliminar
  9. para eliminar el primer elemento de una pila

    ResponderEliminar
  10. Hola y si lo haces con stack como saldría.

    ResponderEliminar