domingo, 13 de febrero de 2011

Pilas En Java

Una Pila en palabras sencillas es un lugar donde se almacenan datos, al igual que en un Array, pero una Pila tiene una filosofía de entrada y salida de datos, esta filosofía es la LIFO (Last In First Out, en español, ultimo en entrar, primero en salir). Esta estructura de datos tiene muchas aplicaciones debido a su simplicidad.

Ahora vamos a implementar esta estructura en lenguaje de programación Java, aunque debemos tomar en cuenta que esta clase Pila ya existe en el API de Java, con el nombre Stack (Pila en ingles) en el paquete java.util pero de esta clase hablamos en otro Post. Ahora implementemos desde cero, que nos ayudara a entender su funcionamiento y además porque nos lo piden en materias de estructura de datos. La versión que veremos esta muy bien estructurada y con tipo de datos primitivos, por eso utilizaremos un Array para almacenar los datos asiéndolo así no dinámica (porque no la dimensión de un vector la declaramos en cuando se la crea, es de dimisión fija).
Gráficamente a una pila la representamos así:

Pilas
Esta pila tiene 4 elementos, para la implementación de la clase haremos uso una variable entera tope que se encargara de decirnos en que posición del Array esta el elemento de la cima, en este caso tope=3 porque en el Array donde ingresamos los datos desde la posición 0, entonces los atributos son:

private final int MAXIMO = 100;
private int[] V;
private int tope;

El atributo MAXIMO podemos poner un numero grande considerando la cantidad aproximada que deseemos almacenar.

Los métodos principales de una Pila son:

esVacia()
retorna verdad o falso si la Pila esta vacía, es decir que no tiene ningún elemento, retorna un boolean.

apilar(int a)
adiciona el elemento a en la Pila.

desapilar()
elimina el elemento de la cima de la pila.

vaciar(Pila B)
vacía todo el contenido de la Pila B en la Pila, dejando a B vacía.

tamanio()
retorna cuantos elementos tenemos en la Pila.

cima()
retorna el elemento de la cima sin eliminarlo de la Pila.

mostrar()
muestra todos los elementos de la Pila en modo Consola.

Siguiendo la filosofía se adicionar elementos apilando uno debajo de otro.

Pilas apilar
Para eliminar un elemento, se extrae o desapila un elemento por la cima.

pilas desapilar
Otro método que necesita explicación es el método vaciar, un método muy útil que también utilizamos para mostrar la Pila es el vaciar.

pilas vaciar
Luego la Pila principal queda vacía y la pila B queda así:

pilas vaciada
Ahora pueden descargarse el todo el código fuente, totalmente funcional, por el momento publico la versión para números enteros, luego verán una pila genérica que almacena todo tipo de objetos.

24 comentarios:

  1. Tambien es importante saber que dentro de Java tenemos la clase Stack donde tiene todos los anteriores metodos ya señalados, seria bueno hecharle un vistazo y ver la funcionalidad de esta
    =)

    ResponderEliminar
  2. interesante lo explicaste muy bien..ya me venia bien revisar esto...

    ResponderEliminar
  3. Bien Men Gracias Por El Aporte, Ahora Voy A Poder Terminar Mi Trabajo

    ResponderEliminar
    Respuestas
    1. que onda lo puedes pasar mandalo ami correo vale bro es:

      dani53974606@live.com.mx graciasss.

      Eliminar
  4. Buena información! Pero el link de descarga del codigo no funciona.

    ResponderEliminar
    Respuestas
    1. Debe funcionar, pero necesitas agregar el Main

      Eliminar
  5. Gracias por la visita, ya esta solucionado el enlace, ahora esta en un mejor lugar siempre disponible :)

    ResponderEliminar
  6. Que buena tu pagina Dani , me sirvio de mucho

    ResponderEliminar
  7. muy buen post! ^^
    gracias, me haz ayudado a entender muy bien eso, gracias...

    ResponderEliminar
  8. Perdón, soy nueva en esto y tu explicación me parecio súper bien, solo que copie tu código y lo pegue en una clase en Java, pero no me corre, no se que otra cosa necesito hacer ????

    Ayuda please !!!

    ResponderEliminar
  9. la clase Stack o pila es lo mismo peromuy bien gracias por el aporte fue de gran ayuda animo

    ResponderEliminar
  10. la explicacion muy bien pero la ejecucion ni mierda

    ResponderEliminar
    Respuestas
    1. Amigo, no sé si te diste cuenta, pero no corre porque no tiene main

      Eliminar
  11. Podrías actualizar el enlace, ya que al parecer esta roto ...

    ResponderEliminar
  12. Me gusto mucho tu explicacion, tu codigo no lo he probado pero lo hare; hice algo parecido, pero use un arrayList;

    http://usandojava.blogspot.com/2012/01/implementacion-de-pila-y-cola.html

    ResponderEliminar
  13. Muy bueno, los ejemplos graficos son de gran ayuda ;) (y)

    ResponderEliminar
  14. Realmente me sirvio de mucho los ejemplos graficos esta bien....

    ResponderEliminar
  15. exelente post ya lo ejecute y esta muy bien!!!..

    ResponderEliminar
  16. Gracias amigo, si que me ayudo

    ResponderEliminar
  17. soy profesor de sistemas y pin pon papas

    ResponderEliminar

Deja tu comentario, agradecimiento, sugerencia o critica.