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
- Importació de la Classe Stack:
import java.util.Stack;
- Creació d'una Instància de Stack:
Stack<Integer> stack = new Stack<>();
- Afegir Elements:
stack.push(10);
,stack.push(20);
,stack.push(30);
- Mostrar el Cim de la Pila:
stack.peek();
- Treure Elements:
stack.pop();
- 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:
- Afegeix els strings "Hola", "Món" i "Java".
- Mostra el cim de la pila.
- Treu un element de la pila i mostra'l.
- 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
- Recórrer l'Expressió:
for (char ch : expression.toCharArray())
- Afegir Parèntesis Oberts a la Pila:
if (ch == '(') { stack.push(ch); }
- Treure Parèntesis Tancats de la Pila:
else if (ch == ')') { if (stack.isEmpty()) { return false; } stack.pop(); }
- 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
- Introducció a Java
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Operadors
Mòdul 2: Flux de Control
Mòdul 3: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Mètodes
- Constructors
- Herència
- Polimorfisme
- Encapsulació
- Abstracció
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
- Lectura de Fitxers
- Escriptura de Fitxers
- Fluxos de Fitxers
- BufferedReader i BufferedWriter
- Serialització
Mòdul 8: Multithreading i Concurrència
- Introducció al Multithreading
- Creació de Fils
- Cicle de Vida dels Fils
- Sincronització
- Utilitats de Concurrència
Mòdul 9: Xarxes
- Introducció a les Xarxes
- Sockets
- ServerSocket
- DatagramSocket i DatagramPacket
- URL i HttpURLConnection