Διαφορά μεταξύ λίστας συστοιχιών και συνδεδεμένης λίστας

Διαφορά μεταξύ λίστας συστοιχιών και συνδεδεμένης λίστας

Πώς αποθηκεύονται τα δεδομένα;



Λίστα συστοιχιών και συνδεδεμένη λίστα είναι συνηθισμένοι όροι όταν πρόκειται δεδομένα αποθήκευση και ανάκτηση. Αν και υπάρχουν πολλές συσκευές αποθήκευσης, τελικά, εξαρτώνται από τον μηχανισμό αποθήκευσης. Αυτοί οι δύο μηχανισμοί αποθήκευσης τοποθετούν τα δεδομένα σας στις συσκευές αποθήκευσης και τα ανακτούν όταν χρειάζεται. Ας παίρνω μια ματιά στο πώς αποθηκεύουν δεδομένα στη μνήμη τους. Η λίστα Array χρησιμοποιεί μια διαδοχική αποθήκευση και τα κομμάτια των δεδομένων αποθηκεύονται το ένα μετά το άλλο. Αυτή είναι ίσως μια απλούστερη μορφή αποθήκευσης - αποφεύγει τη σύγχυση. Ναι, μπορούμε να ανακτήσουμε το επόμενο στοιχείο ή δεδομένα από την επόμενη θέση μνήμης της λίστας συστοιχιών. Ωστόσο, αποθηκεύεται με τη βοήθεια δεικτών στη λίστα Συνδεδεμένοι. Εδώ χρειαζόμαστε δύο θέσεις μνήμης για αποθήκευση - μία για τα δεδομένα, η άλλη για το δείκτη. Ένας δείκτης απευθύνεται στη θέση μνήμης των επόμενων δεδομένων. Μπορούμε εύκολα να καταλάβουμε ότι η συνδεδεμένη λίστα δεν αποθηκεύει δεδομένα διαδοχικά. Αντίθετα, χρησιμοποιεί έναν τυχαίο μηχανισμό αποθήκευσης. Οι δείκτες είναι τα βασικά στοιχεία για τον εντοπισμό των θέσεων δεδομένων στη μνήμη.

Δυναμική σειρά και συνδεδεμένη λίστα

Έχουμε ήδη συζητήσει πώς και οι δύο μηχανισμοί αποθήκευσης τοποθετούν δεδομένα και μπορούμε να δώσουμε έναν όρο «δυναμική συστοιχία» για το Το σχήμα εσωτερικού χώρου αποθήκευσης της σειράς. Βάζει απλώς τα κομμάτια δεδομένων το ένα μετά το άλλο - από τότε το όνομα - ενώ η Λίστα συνδεδεμένων χρησιμοποιεί μια εσωτερική λίστα με τη βοήθεια των δεικτών για την παρακολούθηση του επόμενου στοιχείου. Επομένως, χρησιμοποιεί μια εσωτερική συνδεδεμένη λίστα, όπως μια μεμονωμένη ή διπλά συνδεδεμένη λίστα για να μας δείξει τα επόμενα δεδομένα.



Χρήση μνήμης

Καθώς η λίστα Array αποθηκεύει μόνο τα πραγματικά δεδομένα, χρειαζόμαστε χώρο μόνο για τα δεδομένα που αποθηκεύουμε. Αντίθετα, στη λίστα Συνδεδεμένοι, χρησιμοποιούμε επίσης δείκτες. Επομένως, απαιτούνται δύο θέσεις μνήμης και μπορούμε να πούμε ότι η συνδεδεμένη λίστα καταναλώνει περισσότερη μνήμη από τη λίστα Array. Μια πλεονεκτική πλευρά της συνδεδεμένης λίστας είναι ότι ποτέ δεν απαιτεί συνεχείς τοποθεσίες μνήμης για την αποθήκευση των δεδομένων μας, σε αντίθεση με τη λίστα Array. Οι δείκτες μπορούν να κρατήσουν τη θέση της επόμενης θέσης δεδομένων και μπορούμε ακόμη και να χρησιμοποιήσουμε μικρότερες υποδοχές μνήμης που δεν είναι συνεχείς. Όσον αφορά τη χρήση μνήμης, οι δείκτες παίζουν τον κύριο ρόλο στη λίστα Συνδεδεμένοι, και το ίδιο ισχύει και για την αποτελεσματικότητά τους.

Μέγεθος της αρχικής λίστας συστοιχιών και της συνδεδεμένης λίστας



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

Ανάκτηση δεδομένων

Η ανάκτηση δεδομένων είναι απλούστερη στη λίστα Array καθώς αποθηκεύεται διαδοχικά. Το μόνο που κάνει είναι να προσδιορίσει την πρώτη θέση δεδομένων. από εκεί, η επόμενη τοποθεσία έχει πρόσβαση διαδοχικά για να ανακτήσει τα υπόλοιπα. Υπολογίζει όπως η πρώτη θέση δεδομένων + «n», όπου «n» είναι η σειρά των δεδομένων στη λίστα Array. Η συνδεδεμένη λίστα αναφέρεται στον αρχικό δείκτη για την εύρεση της πρώτης θέσης δεδομένων και από εκεί αναφέρεται ο δείκτης που σχετίζεται με κάθε δεδομένα για να βρει την επόμενη θέση δεδομένων. Η διαδικασία ανάκτησης εξαρτάται κυρίως από τους δείκτες εδώ, και μας δείχνουν αποτελεσματικά την επόμενη τοποθεσία δεδομένων.

Τέλος δεδομένων

Η λίστα Array χρησιμοποιεί μια τιμή null για να επισημάνει το τέλος των δεδομένων, ενώ η λίστα Linked χρησιμοποιεί έναν μηδενικό δείκτη για το σκοπό αυτό. Μόλις το σύστημα αναγνωρίσει null δεδομένα, η λίστα Array σταματά την επόμενη ανάκτηση δεδομένων. Με παρόμοιο τρόπο, ο μηδενικός δείκτης σταματά το σύστημα να προχωρήσει στην επόμενη ανάκτηση δεδομένων.

Αντίστροφη διέλευση



Η συνδεδεμένη λίστα μας επιτρέπει να διασχίσουμε τις αντίστροφες κατευθύνσεις με τη βοήθεια του φθίνουσας γραμμής (). Ωστόσο, δεν έχουμε μια τέτοια δυνατότητα σε μια λίστα Array - η αντίστροφη διέλευση γίνεται πρόβλημα εδώ.

Σύνταξη

Ας δούμε τη σύνταξη Java και των δύο μηχανισμών αποθήκευσης.

Δημιουργία λίστας συστοιχιών:



Λίστα arraylistsample = new ArrayList ();

Προσθήκη αντικειμένων στη λίστα συστοιχιών:

Arraylistsample.add ('name1');

Arraylistsample.add ('name2');

Έτσι θα είναι η προκύπτουσα λίστα Array - [name1, name2].

Δημιουργία συνδεδεμένης λίστας:

Λίστα Linkedlistsample = new LinkedList ();

Προσθήκη αντικειμένων στη συνδεδεμένη λίστα:

Linkedlistsample.add ('όνομα3');

Linkedlistsample.add ('όνομα4');

Έτσι θα μοιάζει η προκύπτουσα Συνδεδεμένη λίστα - [name3, name4].

Ποιο είναι καλύτερο για τη Λήψη ή τη λειτουργία αναζήτησης;

Η λίστα Array διαρκεί O (1) χρόνο τρέξιμο οποιαδήποτε αναζήτηση δεδομένων, ενώ η συνδεδεμένη λίστα παίρνει u O (n) για το nουαναζήτηση δεδομένων. Επομένως, μια λίστα Array χρησιμοποιεί πάντα έναν σταθερό χρόνο για οποιαδήποτε αναζήτηση δεδομένων, αλλά στη λίστα Linked, ο χρόνος που απαιτείται εξαρτάται από τη θέση των δεδομένων. Επομένως, οι λίστες Array είναι πάντα μια καλύτερη επιλογή για λειτουργίες Λήψης ή Αναζήτησης.

Ποιο είναι καλύτερο για τη λειτουργία εισαγωγής ή προσθήκης;

Τόσο η λίστα Array όσο και η συνδεδεμένη λίστα χρειάζονται χρόνο O (1) για την προσθήκη δεδομένων. Αλλά εάν ο πίνακας είναι πλήρης, τότε η λίστα Array χρειάζεται πολύ χρόνο για να αλλάξει το μέγεθός της και να αντιγράψει τα στοιχεία στο νεότερο. Σε μια τέτοια περίπτωση, η συνδεδεμένη λίστα είναι η καλύτερη επιλογή.

Ποιο είναι καλύτερο για τη λειτουργία κατάργησης;

Η λειτουργία κατάργησης διαρκεί σχεδόν το ίδιο χρονικό διάστημα τόσο στη λίστα Array όσο και στη λίστα Linked. Στη λίστα Array, αυτή η λειτουργία διαγράφει τα δεδομένα και, στη συνέχεια, αλλάζει τη θέση των δεδομένων για να σχηματίσει τη νεότερη συστοιχία - χρειάζεται Ο (n) χρόνος. Στη λίστα Linked, αυτή η λειτουργία διασχίζει τα συγκεκριμένα δεδομένα και αλλάζει τις θέσεις του δείκτη για να σχηματίσει τη νεότερη λίστα. Ο χρόνος για τη διασταύρωση και την αφαίρεση είναι επίσης O (n) εδώ.

Ποιο είναι πιο γρήγορο;

Γνωρίζουμε ότι μια λίστα Array χρησιμοποιεί έναν εσωτερικό πίνακα για την αποθήκευση των πραγματικών δεδομένων. Επομένως, εάν διαγραφούν οποιαδήποτε δεδομένα, τότε όλα τα επόμενα δεδομένα χρειάζονται αλλαγή μνήμης. Προφανώς, αυτό απαιτεί σημαντικό χρονικό διάστημα και επιβραδύνει τα πράγματα. Μια τέτοια μετατόπιση μνήμης δεν απαιτείται στη λίστα Συνδεδεμένοι, καθώς το μόνο που κάνει είναι να αλλάξετε τη θέση του δείκτη. Επομένως, μια συνδεδεμένη λίστα είναι ταχύτερη από μια λίστα Array σε οποιοδήποτε είδος αποθήκευσης δεδομένων. Ωστόσο, αυτό εξαρτάται αποκλειστικά από τον τύπο της λειτουργίας, δηλαδή για τη λειτουργία Λήψη ή Αναζήτηση, η λίστα Συνδέεται διαρκεί πολύ περισσότερο από μια λίστα Array. Όταν εξετάζουμε τη συνολική απόδοση, μπορούμε να πούμε ότι η λίστα Συνδέεται είναι ταχύτερη.

Πότε να χρησιμοποιήσετε μια λίστα συστοιχιών και μια συνδεδεμένη λίστα;

Μια λίστα Array είναι η πιο κατάλληλη για μικρότερες απαιτήσεις δεδομένων όπου υπάρχει συνεχής μνήμη. Αλλά όταν ασχολούμαστε με τεράστιες ποσότητες δεδομένων, η διαθεσιμότητα της συνεχούς μνήμης εφαρμόζει τους μηχανισμούς αποθήκευσης δεδομένων, είτε είναι μικρός είτε τεράστιος. Στη συνέχεια, αποφασίστε ποια θα επιλέξετε - τη λίστα Array ή τη λίστα Linked. Μπορείτε να προχωρήσετε με μια λίστα πινάκων όταν χρειάζεστε απλώς αποθήκευση και ανάκτηση δεδομένων. Αλλά μια λίστα μπορεί να σας βοηθήσει πέρα ​​από αυτό, χειρίζοντας δεδομένα. Μόλις αποφασίσετε πόσο συχνά απαιτείται χειρισμός δεδομένων, είναι σημαντικό να ελέγξετε τον τύπο ανάκτησης δεδομένων που συνήθως εκτελείτε. Όταν είναι απλώς Λήψη ή Αναζήτηση, τότε η Λίστα Πίνακας είναι η καλύτερη επιλογή. για άλλες λειτουργίες όπως Εισαγωγή ή Διαγραφή, προχωρήστε με τη λίστα Συνδεδεμένοι.

Ας δούμε τις διαφορές σε μορφή πίνακα.

ΝΟ Έννοιες Διαφορές
Λίστα συστοιχιών Συνδεδεμένη λίστα
1 Μόδα αποθήκευσης δεδομένων Χρησιμοποιεί διαδοχική αποθήκευση δεδομένων Χρησιμοποιεί μη διαδοχική αποθήκευση δεδομένων
2 Σχέδιο εσωτερικής αποθήκευσης Διατηρεί μια εσωτερική δυναμική συστοιχία Διατηρεί μια συνδεδεμένη λίστα
3 Χρήση μνήμης Απαιτεί χώρο μνήμης μόνο για τα δεδομένα Απαιτεί χώρο μνήμης για δεδομένα καθώς και για δείκτες
4 Μέγεθος της αρχικής λίστας Χρειάζεται χώρο για τουλάχιστον 10 αντικείμενα Δεν χρειάζεται χώρο και μπορούμε ακόμη και να δημιουργήσουμε μια κενή συνδεδεμένη λίστα μεγέθους 0.
5 Ανάκτηση δεδομένων Υπολογίζει όπως η πρώτη θέση δεδομένων + «n», όπου «n» είναι η σειρά των δεδομένων στη λίστα Array Διασταύρωση από το πρώτο ή το τελευταίο μέχρι τα απαιτούμενα δεδομένα
6 Τέλος δεδομένων Οι τιμές Null σηματοδοτούν το τέλος Το Null Pointer σηματοδοτεί το τέλος
7 Αντίστροφη διέλευση Δεν το επιτρέπει Το επιτρέπει με τη βοήθεια του φθίνουσου κριτή ()
8 Σύνταξη δημιουργίας λίστας Λίστα arraylistsample = new ArrayList ();

Λίστα Linkedlistsample = new LinkedList ();

9 Προσθήκη αντικειμένων Arraylistsample.add ('name1');

Linkedlistsample.add ('όνομα3');

10 Λήψη ή αναζήτηση Παίρνει χρόνο O (1) και έχει καλύτερη απόδοση Παίρνει O (n) χρόνο και η απόδοση εξαρτάται από τη θέση των δεδομένων
έντεκα Εισαγωγή ή προσθήκη Καταναλώνει χρόνο O (1) εκτός εάν ο πίνακας είναι πλήρης Καταναλώνει χρόνο O (1) σε όλες τις περιστάσεις
12 Διαγραφή ή αφαίρεση Παίρνει O (n) χρόνο Παίρνει O (n) χρόνο
13 Πότε να χρησιμοποιήσετε; Όταν εμπλέκονται πολλές λειτουργίες Λήψης ή Αναζήτησης. η διαθεσιμότητα μνήμης πρέπει να είναι υψηλότερη ακόμη και στην αρχή Όταν υπάρχουν πολλές λειτουργίες Εισαγωγής ή Διαγραφής και η διαθεσιμότητα μνήμης δεν χρειάζεται να είναι συνεχής

Δημοφιλείς Αναρτήσεις

Διαφορά μεταξύ έθνους και χώρας

Έθνος εναντίον χώρας Η διαφορά μεταξύ «Έθνους» και «Χώρα» Κάνε «Χώρα» και «Έθνος» σημαίνει το ίδιο πράγμα; Υπάρχουν μερικές σημαντικές διαφορές μεταξύ των όρων

Διαφορά μεταξύ του Λουθηρανισμού και του Καλβινισμού

Ο Λουθηρανισμός εναντίον του Καλβινισμού Σε γενικές γραμμές, ο Καλβινισμός μπορεί να θεωρηθεί ουσιαστικά συνώνυμος με την αναθεωρημένη θεολογία ή τον «αναμορφωμένο Προτεσταντισμό», που αποτελείται από:

Διαφορά μεταξύ συναισθηματικού και αποτελεσματικού

Affective vs Effective Κάθε φορά που γράφουμε συνθέσεις ή άρθρα, ως μέρος των καθηκόντων μας στο σχολείο, ένα από τα πράγματα στα οποία βαθμολογούμε είναι η επιλογή μας

Διαφορά μεταξύ WBS και σχεδίου έργου

WBS vs Σχέδιο Έργου Σε έργα μεγάλης κλίμακας, δεν αρκεί να το κάνουμε. Είναι απαραίτητο να υπάρχει μια επιστημονική προσέγγιση για να ολοκληρωθεί επιτυχώς

Δείτε πόσα μετρητά θα δώσουν οι καλεσμένοι σας ως γαμήλιο δώρο, ανά πολιτεία. (Στην τελευταία θέση: Γιούτα)

Σύμφωνα με τον εθνικό μέσο όρο, μια νύφη και ένας γαμπρός στις Ηνωμένες Πολιτείες μπορούν να αναμένουν δώρα γάμου σε μετρητά γύρω στα 120 δολάρια - αλλά το ποσό μπορεί να ποικίλλει σημαντικά ανάλογα με το πού και πότε φιλοξενούν τον γάμο τους. Αυτό το infographic από το Tendr, έναν ιστότοπο που επιτρέπει στα ζευγάρια να δημιουργήσουν ένα ηλεκτρονικό ταμείο, αναλύει πόσα μετρητά δίνουν οι καλεσμένοι του γάμου, κατά μέσο όρο, ανά κράτος. Ακριβώς πόσα χρήματα πρέπει να δώσετε ως δώρο γάμου: Ακολουθούν 11 παράγοντες που θα σας βοηθήσουν να αποφασίσετε δεν χρειάζεται να μοιράσουν τον πλούτο τους σε πολλούς γάμους. Ο μέσος όρος μειώνεται από τον Ιούνιο έως τον Αύγουστο και φτάνει τα 124 δολάρια τον Σεπτέμβριο, όταν οι επισκέπτες πιθανώς νιώθουν ότι έχουν κρυφτεί μετά την περίοδο αιχμής του γάμου. Φυσικά, στο τέλος της ημέρας, ένας γάμος δεν είναι να πάρει δώρα και η νύφη και ο γαμπρός θα πρέπει να είναι ευγνώμονες για οτιδήποτε μπορούν να προσφέρουν οι καλεσμένοι τους. Παρακολουθήστε: Γιατί πρέπει να κάνετε τη χάρη στους φίλους σας και να ξεφύγετε.

Ημιτελής σιδηροδρομική περικοπή στο Second Manassas

Ένας σιδηρόδρομος πουθενά έδωσε στις Συνομοσπονδίες ένα τακτικό πλεονέκτημα στο Second Manassas.