Els projectes finals són una oportunitat per aplicar tots els conceptes apresos durant el curs d'Estructures de Dades. Aquests projectes estan dissenyats per desafiar-te i ajudar-te a consolidar els teus coneixements mitjançant la resolució de problemes reals. A continuació, es presenten tres projectes finals que cobreixen diferents aspectes de les estructures de dades.
Projecte 1: Gestió d'una Biblioteca
Descripció
Crea un sistema de gestió per a una biblioteca que permeti gestionar llibres, usuaris i préstecs. Aquest sistema ha de permetre les següents operacions:
- Afegir, eliminar i cercar llibres.
- Afegir, eliminar i cercar usuaris.
- Registrar préstecs de llibres als usuaris.
- Gestionar la devolució de llibres.
Requisits
- Utilitza llistes enllaçades per gestionar els llibres i els usuaris.
- Utilitza una pila per gestionar els llibres retornats recentment.
- Utilitza una cua per gestionar els llibres en espera de ser prestats.
Exemples de Codi
Llista Enllaçada per Llibres
class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None def add_book(self, book): new_node = Node(book) new_node.next = self.head self.head = new_node def remove_book(self, book): temp = self.head if temp is not None: if temp.data == book: self.head = temp.next temp = None return while temp is not None: if temp.data == book: break prev = temp temp = temp.next if temp == None: return prev.next = temp.next temp = None def search_book(self, book): current = self.head while current: if current.data == book: return True current = current.next return False
Pila per Llibres Retornats
class Stack: def __init__(self): self.stack = [] def push(self, item): self.stack.append(item) def pop(self): if not self.is_empty(): return self.stack.pop() return None def is_empty(self): return len(self.stack) == 0
Cua per Llibres en Espera
class Queue: def __init__(self): self.queue = [] def enqueue(self, item): self.queue.append(item) def dequeue(self): if not self.is_empty(): return self.queue.pop(0) return None def is_empty(self): return len(self.queue) == 0
Exercici Pràctic
Implementa les classes LinkedList
, Stack
i Queue
per gestionar els llibres, els llibres retornats i els llibres en espera, respectivament. Prova el teu sistema amb diferents operacions per assegurar-te que funciona correctament.
Projecte 2: Sistema de Gestió de Tasques
Descripció
Desenvolupa un sistema de gestió de tasques que permeti als usuaris crear, eliminar i prioritzar tasques. Aquest sistema ha de permetre les següents operacions:
- Afegir, eliminar i cercar tasques.
- Prioritzar tasques.
- Mostrar les tasques en ordre de prioritat.
Requisits
- Utilitza una cua de prioritat per gestionar les tasques.
- Cada tasca ha de tenir un nivell de prioritat associat.
Exemples de Codi
Cua de Prioritat per Tasques
import heapq class PriorityQueue: def __init__(self): self.heap = [] def add_task(self, task, priority): heapq.heappush(self.heap, (priority, task)) def remove_task(self): if not self.is_empty(): return heapq.heappop(self.heap)[1] return None def is_empty(self): return len(self.heap) == 0 def peek(self): if not self.is_empty(): return self.heap[0][1] return None
Exercici Pràctic
Implementa la classe PriorityQueue
per gestionar les tasques amb diferents nivells de prioritat. Prova el teu sistema amb diferents operacions per assegurar-te que funciona correctament.
Projecte 3: Navegació en un Mapa
Descripció
Desenvolupa un sistema de navegació que permeti trobar el camí més curt entre dues ubicacions en un mapa. Aquest sistema ha de permetre les següents operacions:
- Afegir, eliminar i cercar ubicacions.
- Afegir, eliminar i cercar camins entre ubicacions.
- Trobar el camí més curt entre dues ubicacions.
Requisits
- Utilitza un graf per representar el mapa.
- Implementa l'algoritme de Dijkstra per trobar el camí més curt.
Exemples de Codi
Graf per Representar el Mapa
import heapq class Graph: def __init__(self): self.nodes = set() self.edges = {} self.distances = {} def add_node(self, value): self.nodes.add(value) self.edges[value] = [] def add_edge(self, from_node, to_node, distance): self.edges[from_node].append(to_node) self.edges[to_node].append(from_node) self.distances[(from_node, to_node)] = distance self.distances[(to_node, from_node)] = distance def dijkstra(self, initial): visited = {initial: 0} path = {} nodes = set(self.nodes) while nodes: min_node = None for node in nodes: if node in visited: if min_node is None: min_node = node elif visited[node] < visited[min_node]: min_node = node if min_node is None: break nodes.remove(min_node) current_weight = visited[min_node] for edge in self.edges[min_node]: weight = current_weight + self.distances[(min_node, edge)] if edge not in visited or weight < visited[edge]: visited[edge] = weight path[edge] = min_node return visited, path
Exercici Pràctic
Implementa la classe Graph
i l'algoritme de Dijkstra per trobar el camí més curt entre dues ubicacions en un mapa. Prova el teu sistema amb diferents operacions per assegurar-te que funciona correctament.
Conclusió
Els projectes finals són una excel·lent manera de posar en pràctica els teus coneixements sobre estructures de dades. Aquests projectes no només t'ajudaran a consolidar els conceptes apresos, sinó que també et proporcionaran experiència en la resolució de problemes reals. Assegura't de completar tots els projectes i de provar les teves solucions amb diferents casos per garantir que el teu sistema funcioni correctament.
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