Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> Προγραμματισμός Java

Πώς να συγχωνεύσει τα δύο ταξινομημένες ADT λίστες

Μια Αφηρημένου Τύπου Δεδομένων (ΑΤΔ ) κατάλογο , ή συνδεδεμένη λίστα , καθώς είναι πιο συχνά αποκαλείται , είναι μία από τις θεμελιώδεις δομές δεδομένων στην επιστήμη των υπολογιστών και μία από τις πρώτες εναλλακτικές λύσεις για την απλή παράταξη μάθει από μια επιστήμη των υπολογιστών των φοιτητών . Αν και θυσιάζει την ικανότητα να κινείται στη μέση του καταλόγου , χωρίς να ψάχνουν μέσα από την πρώτη λίστα , η λίστα ADT καθιστά κοινότοπα εύκολο να επεκταθεί και να συρρικνωθεί τα αποθηκευμένα δεδομένα . Αυτός ο κωδικός έχει υλοποιηθεί σε Java , αφού ενσωματωμένο Συνδέεται δομή δεδομένων λίστας της Java μας επιτρέπει να πάρετε κατευθείαν στο σημείο , αλλά η ίδια λογική θα μπορούσε να εφαρμοστεί με την ελάχιστη τροποποίηση σε οποιοδήποτε άλλο C - όπως η γλώσσα . Οδηγίες
Η 1

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

LinkedList list1 = νέα LinkedList ( ) ?

LinkedList List2 = νέα LinkedList ( ) ?

για ( int x = 0 ? x <100 ? x + + ) έχετε δύο συνδεδεμένες λίστες γεμίζουν με τυχαίους αριθμούς που έχουν ταξινομηθεί 2

Δημιουργήστε ένα νέο Linked List για να κρατήσει τη λίστα συγχωνευθείσα με την επικόλληση το εξής : .

LinkedList συγχωνεύθηκαν = νέα LinkedList ( ) ?
εικόνων 3

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

//Ενώ και οι δύο κατάλογοι δεν είναι άδειο

ενώ ( ! list1.isEmpty ( ) && ! ​​list2.isEmpty ( ) ) {

αν ( list1.peek ( ) <= list2.peek ( ) ) {

συγχωνεύθηκαν . προσθέστε ( list1.pop ( ) ) ?

} else {

merged.add ( list2.pop ( ) ) ?

}

}

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

Τελειώστε τη δουλειά . Συντομότερο είτε λίστα είναι κενή , δεν υπάρχει ανάγκη να συνεχιστεί η πραγματοποίηση συγκρίσεων. Ως εκ τούτου , το παλιό βρόχος τελειώνει , και έναν άλλο βρόχο έχει δημιουργηθεί για να καλύψει το υπόλοιπο της νέας λίστας με τα υπόλοιπα στοιχεία του τελευταίου καταλόγου :

//Ενώ η πρώτη λίστα δεν είναι κενή

ενώ ( list1.isEmpty ( !) ) {

merged.add ( list1.pop ( ) ) ?

}

//ενώ ο δεύτερος κατάλογος δεν είναι άδειος .

ενώ {

merged.add ( list2.pop ( ) ) ?

} ( list2.isEmpty ( !) )
5

Εκτυπώστε τα αποτελέσματα , έτσι ώστε να μπορέσει να επιθεωρήσει την λίστα συγχωνευθείσας και να εξασφαλίσει ότι λειτούργησε σωστά :

int x = 1 ?

για ( Double y : συγχωνεύονται ) {

συστήματος . out.println ( x + " " + y ) ?

x + + ?

}
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα