|
|
@@ -1,78 +1,70 @@
|
|
|
-public class Stack<T> {
|
|
|
- private Node<T> top; // Puntero al tope de la pila
|
|
|
- private int size; // Tamaño de la pila
|
|
|
-
|
|
|
- // Clase interna para el nodo
|
|
|
- private static class Node<T> {
|
|
|
- T data;
|
|
|
- Node<T> next;
|
|
|
-
|
|
|
- Node(T data) {
|
|
|
- this.data = data;
|
|
|
- this.next = null;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // Constructor para la pila
|
|
|
- public Stack() {
|
|
|
- top = null;
|
|
|
- size = 0;
|
|
|
- }
|
|
|
-
|
|
|
- // Método para agregar un elemento a la pila
|
|
|
- public void push(T data) {
|
|
|
- Node<T> newNode = new Node<>(data);
|
|
|
- if (isEmpty()) {
|
|
|
- top = newNode;
|
|
|
- } else {
|
|
|
- newNode.next = top;
|
|
|
- top = newNode;
|
|
|
- }
|
|
|
- size++;
|
|
|
- }
|
|
|
-
|
|
|
- // Método para eliminar un elemento de la pila
|
|
|
- public T pop() {
|
|
|
- if (isEmpty()) {
|
|
|
- throw new IllegalStateException("La pila está vacía");
|
|
|
- }
|
|
|
- T data = top.data;
|
|
|
- top = top.next;
|
|
|
- size--;
|
|
|
- return data;
|
|
|
- }
|
|
|
-
|
|
|
- // Método para verificar si la pila está vacía
|
|
|
- public boolean isEmpty() {
|
|
|
- return top == null;
|
|
|
- }
|
|
|
-
|
|
|
- // Método para obtener el tamaño de la pila
|
|
|
- public int size() {
|
|
|
- return size;
|
|
|
- }
|
|
|
-
|
|
|
- // Método para imprimir los elementos de la pila
|
|
|
- public void printStack() {
|
|
|
- Node<T> current = top;
|
|
|
- while (current != null) {
|
|
|
- System.out.print(current.data + " ");
|
|
|
- current = current.next;
|
|
|
- }
|
|
|
- System.out.println();
|
|
|
- }
|
|
|
-
|
|
|
- // Método main para probar la implementación de la pila
|
|
|
- public static void main(String[] args) {
|
|
|
- Stack<Integer> stack = new Stack<>();
|
|
|
- stack.push(1);
|
|
|
- stack.push(2);
|
|
|
- stack.push(3);
|
|
|
- System.out.println("Tamaño de la pila: " + stack.size());
|
|
|
- stack.printStack();
|
|
|
- System.out.println("Desapilando: " + stack.pop());
|
|
|
- System.out.println("Desapilando: " + stack.pop());
|
|
|
- System.out.println("Tamaño de la pila después de desapilar dos elementos: " + stack.size());
|
|
|
- stack.printStack();
|
|
|
- }
|
|
|
-}
|
|
|
+class Node {
|
|
|
+ long data; // El dato que se almacenará en el nodo
|
|
|
+ Node next; // Referencia al siguiente nodo en la lista
|
|
|
+
|
|
|
+ public Node(long data) {
|
|
|
+ this.data = data;
|
|
|
+ this.next = null;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+public class Stack {
|
|
|
+ private Node top; // Referencia al nodo superior (cima) del stack
|
|
|
+
|
|
|
+ // Constructor para inicializar un stack vacío
|
|
|
+ public Stack() {
|
|
|
+ top = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Método para añadir un elemento al stack
|
|
|
+ public void push(long j) {
|
|
|
+ Node newNode = new Node(j);
|
|
|
+ if (top == null) {
|
|
|
+ top = newNode; // Si el stack está vacío, el nuevo nodo será la cima
|
|
|
+ } else {
|
|
|
+ newNode.next = top; // El siguiente del nuevo nodo apunta al actual nodo superior
|
|
|
+ top = newNode; // El nuevo nodo se convierte en la nueva cima
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Método para eliminar un elemento del stack
|
|
|
+ public long pop() {
|
|
|
+ if (top == null) {
|
|
|
+ System.out.println("El stack está vacío.");
|
|
|
+ return -1; // Valor especial para indicar error (stack vacío)
|
|
|
+ } else {
|
|
|
+ long temp = top.data; // Guarda el dato de la cima en una variable temporal
|
|
|
+ top = top.next; // Mueve la cima al siguiente nodo
|
|
|
+ return temp; // Devuelve el dato eliminado
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Método para verificar si el stack está vacío
|
|
|
+ public boolean isEmpty() {
|
|
|
+ return (top == null);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Método para obtener el elemento en la cima del stack sin eliminarlo
|
|
|
+ public long peek() {
|
|
|
+ if (top == null) {
|
|
|
+ System.out.println("El stack está vacío.");
|
|
|
+ return -1; // Valor especial para indicar error (stack vacío)
|
|
|
+ } else {
|
|
|
+ return top.data;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ Stack stack = new Stack(); // Crear un stack vacío
|
|
|
+
|
|
|
+ stack.push(10);
|
|
|
+ stack.push(20);
|
|
|
+ stack.push(30);
|
|
|
+ stack.push(40);
|
|
|
+ stack.push(50);
|
|
|
+
|
|
|
+ while (!stack.isEmpty()) {
|
|
|
+ System.out.print(stack.pop() + " "); // Debería imprimir 50 40 30 20 10
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|