Introducció a Stack

Una stack (pila) és una estructura de dades que segueix el principi LIFO (Last In, First Out), és a dir, l'últim element que s'afegeix és el primer que es treu. Les operacions principals d'una stack són:

  • push: Afegeix un element al cim de la pila.
  • pop: Elimina i retorna l'element del cim de la pila.
  • peek: Retorna l'element del cim de la pila sense eliminar-lo.
  • isEmpty: Comprova si la pila està buida.

Implementació de Stack en Java

Java proporciona una classe Stack dins del paquet java.util. A continuació, es mostra com utilitzar aquesta classe:

Exemple Bàsic

import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        // Afegir elements a la pila
        stack.push(10);
        stack.push(20);
        stack.push(30);

        // Mostrar el cim de la pila
        System.out.println("Element al cim: " + stack.peek());

        // Treure elements de la pila
        System.out.println("Element tret: " + stack.pop());
        System.out.println("Element tret: " + stack.pop());

        // Comprovar si la pila està buida
        System.out.println("La pila està buida? " + stack.isEmpty());
    }
}

Explicació del Codi

  1. Importació de la Classe Stack: import java.util.Stack;
  2. Creació d'una Instància de Stack: Stack<Integer> stack = new Stack<>();
  3. Afegir Elements: stack.push(10);, stack.push(20);, stack.push(30);
  4. Mostrar el Cim de la Pila: stack.peek();
  5. Treure Elements: stack.pop();
  6. Comprovar si la Pila està Buida: stack.isEmpty();

Exercicis Pràctics

Exercici 1: Implementar una Pila de Strings

Implementa una pila que emmagatzemi strings i realitza les següents operacions:

  1. Afegeix els strings "Hola", "Món" i "Java".
  2. Mostra el cim de la pila.
  3. Treu un element de la pila i mostra'l.
  4. Comprova si la pila està buida.

Solució

import java.util.Stack;

public class StringStackExample {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();

        // Afegir elements a la pila
        stack.push("Hola");
        stack.push("Món");
        stack.push("Java");

        // Mostrar el cim de la pila
        System.out.println("Element al cim: " + stack.peek());

        // Treure un element de la pila
        System.out.println("Element tret: " + stack.pop());

        // Comprovar si la pila està buida
        System.out.println("La pila està buida? " + stack.isEmpty());
    }
}

Exercici 2: Comprovar una Expressió de Parèntesis

Escriu un programa que comprovi si una expressió de parèntesis està ben equilibrada. Per exemple, l'expressió "(())" està equilibrada, mentre que "(()" no ho està.

Solució

import java.util.Stack;

public class ParenthesisChecker {
    public static boolean isBalanced(String expression) {
        Stack<Character> stack = new Stack<>();

        for (char ch : expression.toCharArray()) {
            if (ch == '(') {
                stack.push(ch);
            } else if (ch == ')') {
                if (stack.isEmpty()) {
                    return false;
                }
                stack.pop();
            }
        }

        return stack.isEmpty();
    }

    public static void main(String[] args) {
        String expression1 = "(())";
        String expression2 = "(()";

        System.out.println("L'expressió " + expression1 + " està equilibrada? " + isBalanced(expression1));
        System.out.println("L'expressió " + expression2 + " està equilibrada? " + isBalanced(expression2));
    }
}

Explicació del Codi

  1. Recórrer l'Expressió: for (char ch : expression.toCharArray())
  2. Afegir Parèntesis Oberts a la Pila: if (ch == '(') { stack.push(ch); }
  3. Treure Parèntesis Tancats de la Pila: else if (ch == ')') { if (stack.isEmpty()) { return false; } stack.pop(); }
  4. Comprovar si la Pila està Buida al Final: return stack.isEmpty();

Resum

En aquesta secció, hem après què és una pila (stack) i com utilitzar-la en Java. Hem vist com afegir, treure i consultar elements en una pila, així com comprovar si està buida. També hem implementat exercicis pràctics per reforçar els conceptes apresos. La pila és una estructura de dades fonamental que es fa servir en molts algorismes i aplicacions, i és important comprendre com funciona i com implementar-la correctament.

Curs de Programació en Java

Mòdul 1: Introducció a Java

Mòdul 2: Flux de Control

Mòdul 3: Programació Orientada a Objectes

Mòdul 4: Programació Orientada a Objectes Avançada

Mòdul 5: Estructures de Dades i Col·leccions

Mòdul 6: Gestió d'Excepcions

Mòdul 7: Entrada/Sortida de Fitxers

Mòdul 8: Multithreading i Concurrència

Mòdul 9: Xarxes

Mòdul 10: Temes Avançats

Mòdul 11: Frameworks i Llibreries de Java

Mòdul 12: Construcció d'Aplicacions del Món Real

© Copyright 2024. Tots els drets reservats