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 FalsePila 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) == 0Cua 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) == 0Exercici 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 NoneExercici 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, pathExercici 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
