Διαδρομές
/
C++
C++
/
Ασκήσεις
/
Συνδεδεμένη λίστα
Συνδεδεμένη λίστα

Συνδεδεμένη λίστα

Μέτριο

Εισαγωγή

Δουλεύεις σε ένα έργο για την ανάπτυξη ενός συστήματος προγραμματισμού δρομολογίων για ένα πολυσύχναστο σιδηροδρομικό δίκτυο.

Σου ζητήθηκε να αναπτύξεις ένα πρωτότυπο για τα δρομολόγια των τρένων στο σύστημα προγραμματισμού. Κάθε δρομολόγιο αποτελείται από μια ακολουθία σιδηροδρομικών σταθμών στους οποίους σταματάει ένα δεδομένο τρένο.

Οδηγίες

Η ομάδα σου έχει αποφασίσει να χρησιμοποιήσει μια διπλά συνδεδεμένη λίστα για να αναπαραστήσει κάθε διαδρομή τρένου στο πρόγραμμα δρομολογίων. Κάθε σταθμός κατά μήκος της διαδρομής του τρένου θα αναπαρίσταται από έναν κόμβο στη συνδεδεμένη λίστα.

Δεν χρειάζεται να ανησυχείς για τις ώρες άφιξης και αναχώρησης στους σταθμούς. Κάθε σταθμός θα αναπαρίσταται απλώς από έναν αριθμό.

Οι διαδρομές μπορούν να επεκταθούν, προσθέτοντας σταθμούς στην αρχή ή στο τέλος μιας διαδρομής. Μπορούν επίσης να συντομευτούν, αφαιρώντας σταθμούς από την αρχή ή το τέλος μιας διαδρομής.

Μερικές φορές ένας σταθμός κλείνει, και σε αυτή την περίπτωση ο σταθμός πρέπει να αφαιρεθεί από τη διαδρομή, ακόμα κι αν δεν βρίσκεται στην αρχή ή στο τέλος της διαδρομής.

Το μέγεθος μιας διαδρομής δεν μετριέται από το πόσο μακριά ταξιδεύει το τρένο, αλλά από το σε πόσους σταθμούς σταματάει.

Note

Η συνδεδεμένη λίστα είναι μια θεμελιώδης δομή δεδομένων στην επιστήμη των υπολογιστών, που χρησιμοποιείται συχνά στην υλοποίηση άλλων δομών δεδομένων. Όπως υποδηλώνει το όνομά της, είναι μια λίστα με κόμβους που συνδέονται μεταξύ τους. Είναι μια λίστα με "κόμβους", όπου κάθε κόμβος συνδέεται με τον γείτονά του ή τους γείτονές του. Σε μια απλά συνδεδεμένη λίστα κάθε κόμβος συνδέεται μόνο με τον κόμβο που τον ακολουθεί. Σε μια διπλά συνδεδεμένη λίστα κάθε κόμβος συνδέεται τόσο με τον κόμβο που προηγείται όσο και με τον κόμβο που ακολουθεί.

Αν θέλεις να εμβαθύνεις στις συνδεδεμένες λίστες, ρίξε μια ματιά σε αυτό το άρθρο που τις εξηγεί με ωραία σχέδια.

Πώς είναι δομημένη αυτή η άσκηση στο track C++

Αν και οι συνδεδεμένες λίστες μπορούν να υλοποιηθούν με πολλούς διαφορετικούς τρόπους και με ποικίλες υποκείμενες δομές δεδομένων, εδώ σου ζητάμε να υλοποιήσεις τη συνδεδεμένη λίστα σου με αντικειμενοστρεφή τρόπο.

Στο αρχείο linked_list_test.cpp θα δεις ότι καλείται μια κλάση List με πρότυπα. Θα πρέπει να γράψεις αυτή την κλάση με τις παρακάτω συναρτήσεις-μέλη:

  • Η push προσθέτει ένα στοιχείο στο τέλος της λίστας,
  • Η pop αφαιρεί και επιστρέφει το τελευταίο στοιχείο της λίστας,
  • Η shift αφαιρεί και επιστρέφει το πρώτο στοιχείο της λίστας,
  • Η unshift προσθέτει ένα στοιχείο στην αρχή της λίστας, και
  • Η count επιστρέφει το συνολικό αριθμό στοιχείων στην τρέχουσα λίστα.

Τέλος, θα θέλαμε να υλοποιήσεις την erase εκτός από τις μεθόδους που περιγράψαμε παραπάνω. Η erase θα παίρνει ένα όρισμα, την τιμή που θα αφαιρεθεί από τη συνδεδεμένη λίστα. Αν η τιμή εμφανίζεται περισσότερες από μία φορές, θα πρέπει να αφαιρείται μόνο η πρώτη εμφάνιση. Θα πρέπει να επιστρέφει αν διαγράφηκε κάποιο στοιχείο ή όχι.

Αν και δεν ελέγχεται, μπορεί να θέλεις να πετάξεις μια εξαίρεση αν κληθούν οι pop και shift σε μια κενή List.


Πηγή

Κλασικό θέμα επιστήμης υπολογιστών
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
C++ Exercism

Έτοιμος να ξεκινήσεις την άσκηση Συνδεδεμένη λίστα;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις C++ με 19 έννοιες100 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.