Stai lavorando a un progetto per sviluppare un sistema di pianificazione dei treni per una rete ferroviaria molto trafficata.
Ti è stato chiesto di sviluppare un prototipo per le tratte dei treni del sistema di pianificazione. Ogni tratta è composta da una sequenza di stazioni ferroviarie in cui un determinato treno fa fermata.
Il tuo team ha deciso di usare una lista doppiamente concatenata per rappresentare ogni percorso ferroviario dell'orario. Ogni stazione lungo il percorso del treno sarà rappresentata da un nodo della lista concatenata.
Non devi preoccuparti degli orari di arrivo e di partenza alle stazioni. Ogni stazione sarà semplicemente rappresentata da un numero.
I percorsi possono essere estesi, aggiungendo stazioni all'inizio o alla fine di un percorso. Si possono anche accorciare rimuovendo stazioni dall'inizio o dalla fine di un percorso.
A volte una stazione viene chiusa, e in quel caso va rimossa dal percorso, anche se non si trova all'inizio o alla fine.
La dimensione di un percorso non si misura in base a quanto lontano viaggia il treno, ma in base a quante stazioni tocca.
La lista concatenata è una struttura dati fondamentale dell'informatica, spesso usata per implementare altre strutture dati. Come suggerisce il nome, è una lista di nodi collegati tra loro. È una lista di «nodi», in cui ogni nodo è collegato al suo vicino o ai suoi vicini. In una lista semplicemente concatenata ogni nodo è collegato solo al nodo che lo segue. In una lista doppiamente concatenata ogni nodo è collegato sia al nodo che viene prima sia a quello che viene dopo.
Se vuoi approfondire le liste concatenate, dai un'occhiata a questo articolo, che le spiega con dei bei disegni.
Le liste collegate si possono implementare in molti modi diversi, con diverse strutture dati di base, ma qui ti chiediamo di implementare la lista collegata seguendo i principi della programmazione orientata agli oggetti.
Nel file linked_list_test.cpp vedrai che viene chiamata una classe List template.
Dovrai scrivere questa classe con le seguenti funzioni membro:
push aggiunge un elemento in fondo alla lista,pop rimuove e restituisce l'ultimo elemento della lista,shift rimuove e restituisce il primo elemento della lista,unshift aggiunge un elemento all'inizio della lista, ecount restituisce il numero totale di elementi presenti nella lista attuale.Infine, oltre ai metodi descritti sopra, vorremmo che implementassi anche erase.
erase prenderà un solo argomento: il valore da rimuovere dalla lista collegata.
Se il valore compare più di una volta, va rimossa solo la prima occorrenza.
Deve restituire se un elemento è stato eliminato oppure no.
Anche se non è testato, potresti voler sollevare un'eccezione quando pop e shift vengono chiamati su una List vuota.
Iscriviti a Exercism per imparare e padroneggiare C++ con 19 concetti100 esercizi e il mentoring di persone reali, tutto gratis.