Stack.java 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. public class Stack<T> {
  2. private Node<T> top; // Puntero al tope de la pila
  3. private int size; // Tamaño de la pila
  4. // Clase interna para el nodo
  5. private static class Node<T> {
  6. T data;
  7. Node<T> next;
  8. Node(T data) {
  9. this.data = data;
  10. this.next = null;
  11. }
  12. }
  13. // Constructor para la pila
  14. public Stack() {
  15. top = null;
  16. size = 0;
  17. }
  18. // Método para agregar un elemento a la pila
  19. public void push(T data) {
  20. Node<T> newNode = new Node<>(data);
  21. if (isEmpty()) {
  22. top = newNode;
  23. } else {
  24. newNode.next = top;
  25. top = newNode;
  26. }
  27. size++;
  28. }
  29. // Método para eliminar un elemento de la pila
  30. public T pop() {
  31. if (isEmpty()) {
  32. throw new IllegalStateException("La pila está vacía");
  33. }
  34. T data = top.data;
  35. top = top.next;
  36. size--;
  37. return data;
  38. }
  39. // Método para verificar si la pila está vacía
  40. public boolean isEmpty() {
  41. return top == null;
  42. }
  43. // Método para obtener el tamaño de la pila
  44. public int size() {
  45. return size;
  46. }
  47. // Método para imprimir los elementos de la pila
  48. public void printStack() {
  49. Node<T> current = top;
  50. while (current != null) {
  51. System.out.print(current.data + " ");
  52. current = current.next;
  53. }
  54. System.out.println();
  55. }
  56. // Método main para probar la implementación de la pila
  57. public static void main(String[] args) {
  58. Stack<Integer> stack = new Stack<>();
  59. stack.push(1);
  60. stack.push(2);
  61. stack.push(3);
  62. System.out.println("Tamaño de la pila: " + stack.size());
  63. stack.printStack();
  64. System.out.println("Desapilando: " + stack.pop());
  65. System.out.println("Desapilando: " + stack.pop());
  66. System.out.println("Tamaño de la pila después de desapilar dos elementos: " + stack.size());
  67. stack.printStack();
  68. }
  69. }