Què és una Cua?
Una cua és una estructura de dades lineal que segueix el principi FIFO (First In, First Out), és a dir, el primer element que entra és el primer que surt. Les cues són molt útils en situacions on l'ordre d'arribada dels elements és important, com en la gestió de tasques o en la transmissió de dades.
Característiques Principals de les Cues
- FIFO (First In, First Out): El primer element afegit a la cua serà el primer a ser eliminat.
- Operacions Bàsiques:
- Enqueue: Afegir un element al final de la cua.
- Dequeue: Eliminar un element del principi de la cua.
- Front: Obtenir el primer element de la cua sense eliminar-lo.
- Rear: Obtenir l'últim element de la cua sense eliminar-lo.
- Aplicacions:
- Gestió de tasques en sistemes operatius.
- Gestió de processos en sistemes de xarxes.
- Implementació de buffers en sistemes de transmissió de dades.
Operacions Bàsiques amb Cues
Enqueue (Afegir un Element)
L'operació d'enqueue afegeix un element al final de la cua. Aquesta operació és generalment O(1), ja que només implica afegir un element al final de la llista.
class Cua: def __init__(self): self.elements = [] def enqueue(self, element): self.elements.append(element) print(f"Element {element} afegit a la cua.")
Dequeue (Eliminar un Element)
L'operació de dequeue elimina el primer element de la cua. Aquesta operació també és generalment O(1), ja que només implica eliminar el primer element de la llista.
class Cua: def __init__(self): self.elements = [] def enqueue(self, element): self.elements.append(element) print(f"Element {element} afegit a la cua.") def dequeue(self): if not self.is_empty(): element = self.elements.pop(0) print(f"Element {element} eliminat de la cua.") return element else: print("La cua està buida.") return None
Front (Obtenir el Primer Element)
L'operació de front retorna el primer element de la cua sense eliminar-lo. Aquesta operació és O(1).
class Cua: def __init__(self): self.elements = [] def enqueue(self, element): self.elements.append(element) print(f"Element {element} afegit a la cua.") def dequeue(self): if not self.is_empty(): element = self.elements.pop(0) print(f"Element {element} eliminat de la cua.") return element else: print("La cua està buida.") return None def front(self): if not self.is_empty(): return self.elements[0] else: print("La cua està buida.") return None
Rear (Obtenir l'Últim Element)
L'operació de rear retorna l'últim element de la cua sense eliminar-lo. Aquesta operació és O(1).
class Cua: def __init__(self): self.elements = [] def enqueue(self, element): self.elements.append(element) print(f"Element {element} afegit a la cua.") def dequeue(self): if not self.is_empty(): element = self.elements.pop(0) print(f"Element {element} eliminat de la cua.") return element else: print("La cua està buida.") return None def front(self): if not self.is_empty(): return self.elements[0] else: print("La cua està buida.") return None def rear(self): if not self.is_empty(): return self.elements[-1] else: print("La cua està buida.") return None
Comprovar si la Cua està Buida
És important tenir una funció per comprovar si la cua està buida abans de realitzar operacions com dequeue, front o rear.
class Cua: def __init__(self): self.elements = [] def enqueue(self, element): self.elements.append(element) print(f"Element {element} afegit a la cua.") def dequeue(self): if not self.is_empty(): element = self.elements.pop(0) print(f"Element {element} eliminat de la cua.") return element else: print("La cua està buida.") return None def front(self): if not self.is_empty(): return self.elements[0] else: print("La cua està buida.") return None def rear(self): if not self.is_empty(): return self.elements[-1] else: print("La cua està buida.") return None def is_empty(self): return len(self.elements) == 0
Exemple Pràctic
A continuació, es mostra un exemple pràctic d'ús de la classe Cua
:
# Crear una cua cua = Cua() # Afegir elements a la cua cua.enqueue(10) cua.enqueue(20) cua.enqueue(30) # Obtenir el primer element print(f"Primer element: {cua.front()}") # Output: Primer element: 10 # Obtenir l'últim element print(f"Últim element: {cua.rear()}") # Output: Últim element: 30 # Eliminar elements de la cua cua.dequeue() # Output: Element 10 eliminat de la cua. cua.dequeue() # Output: Element 20 eliminat de la cua. # Comprovar si la cua està buida print(f"La cua està buida? {cua.is_empty()}") # Output: La cua està buida? False # Eliminar l'últim element cua.dequeue() # Output: Element 30 eliminat de la cua. # Comprovar si la cua està buida print(f"La cua està buida? {cua.is_empty()}") # Output: La cua està buida? True
Conclusió
Les cues són una estructura de dades fonamental en la programació, especialment útils en situacions on l'ordre d'arribada dels elements és crucial. Hem vist les operacions bàsiques amb cues i com implementar-les en Python. En els següents temes, explorarem variacions de les cues com les cues circulars i les cues de prioritat, així com les seves aplicacions pràctiques.
Curs d'Estructures de Dades
Mòdul 1: Introducció a les Estructures de Dades
- Què són les Estructures de Dades?
- Importància de les Estructures de Dades en la Programació
- Tipus d'Estructures de Dades
Mòdul 2: Llistes
- Introducció a les Llistes
- Llistes Enllaçades
- Llistes Doblement Enllaçades
- Llistes Circulars
- Exercicis amb Llistes
Mòdul 3: Piles
- Introducció a les Piles
- Operacions Bàsiques amb Piles
- Implementació de Piles
- Aplicacions de les Piles
- Exercicis amb Piles
Mòdul 4: Cues
- Introducció a les Cues
- Operacions Bàsiques amb Cues
- Cues Circulars
- Cues de Prioritat
- Exercicis amb Cues
Mòdul 5: Arbres
- Introducció als Arbres
- Arbres Binàries
- Arbres Binàries de Cerca
- Arbres AVL
- Arbres B
- Exercicis amb Arbres
Mòdul 6: Grafs
- Introducció als Grafs
- Representació de Grafs
- Algoritmes de Cerca en Grafs
- Algoritmes de Camins Mínims
- Aplicacions dels Grafs
- Exercicis amb Grafs