Συνιστάται, 2024

Επιλογή Συντάκτη

Διαφορά μεταξύ μονοδιάστατου (1D) και διδιάστατου (2D) πίνακα

Ένας πίνακας είναι μια συλλογή μεταβλητών που έχουν παρόμοιους τύπους δεδομένων και αναφέρονται με ένα κοινό όνομα. Ένα συγκεκριμένο στοιχείο σε μια συστοιχία προσπελάζεται από ένα συγκεκριμένο ευρετήριο αυτού του πίνακα. Οι πίνακες σε Java λειτουργούν διαφορετικά σε σύγκριση με τη C ++. Το κύριο θέμα της συζήτησής μας είναι η διαφορά μεταξύ συστοιχιών μονοδιάστατων και δύο διαστάσεων. Μια μονοδιάστατη διάταξη είναι μια λίστα μεταβλητών με τον ίδιο τύπο δεδομένων, ενώ ο πίνακας δύο διαστάσεων είναι ένας πίνακας συστοιχιών που έχει παρόμοιους τύπους δεδομένων. C ++ δεν έχουν δεσμεύσει τον έλεγχο σε πίνακες ενώ η Java έχει αυστηρά δεσμευμένο έλεγχο σε πίνακες.

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

Συγκριτικό διάγραμμα:

Βάση σύγκρισηςΜία διαστάσεωνΔιδιάστατο
Βασικός
Αποθηκεύστε έναν κατάλογο στοιχείων παρόμοιου τύπου δεδομένων.Αποθηκεύστε "κατάλογο λιστών" ή "συστοιχία συστοιχιών" ή "συστοιχία μονοδιάστατων συστοιχιών".
Δήλωση/ * δήλωση στη C ++
πληκτρολογήστε variable_name [μέγεθος], * /
/ * δήλωση στη Java
πληκτρολογήστε variable_name [];
variable_name = νέος τύπος [μέγεθος]; * /
/ * δήλωση στη C ++
πληκτρολογήστε variable_name [size1] [size2]; * /
/ * δήλωση στη Java
πληκτρολογήστε variable_name = new int [size1] [size2]; * /
Εναλλακτική Δήλωση/ * Στη Java
int [] a = νέο int [10]; * /
/ * Στη Java
int [] [] a = νέο int [10] [20]; * /
Συνολικό μέγεθος σε BytesΣυνολικά Bytes = sizeof (τύπος δεδομένων μεταβλητής πίνακα) * μέγεθος πίνακα.Συνολικά Bytes = sizeof (τύπος δεδομένων μεταβλητής πίνακα) * μέγεθος πρώτου δείκτη * μέγεθος δεύτερου ευρετηρίου.
Παραλαβή παραμέτρουΜπορεί να ληφθεί σε έναν δείκτη, σε ένα πίνακα μεγέθους ή σε μια μη ταξινομημένη διάταξη.Η λήψη παραμέτρων πρέπει να ορίζει τη δεξιά διάσταση ενός πίνακα.
ΔιαστάσειςΜία διαστάσεων.Δύο διαστάσεων.

Ορισμός μονοδιάστατου πίνακα (συστοιχία 1-D)

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

Στην C ++, η δήλωση μιας μεταβλητής πίνακα με μέγεθος είναι αρκετή για να διαθέσει χώρο για αυτούς στη μνήμη. Στην Java, αυτό επιτυγχάνεται σε δύο βήματα. Πρώτον, πρέπει να δηλώσετε μια μεταβλητή του επιθυμητού τύπου. Δεύτερον, πρέπει να διαθέσετε τη μνήμη για να κρατήσετε τη συστοιχία χρησιμοποιώντας το "new" και να την αντιστοιχίσετε σε δηλωμένη μεταβλητή πίνακα. Ως εκ τούτου, οι πίνακες διατίθενται δυναμικά στη Java.

Ας συζητήσουμε στο C + + πλαίσιο

 // δήλωση σε τύπο C ++ variable_name [μέγεθος]; 

Εδώ ο τύπος δηλώνει τον τύπο δεδομένων της μεταβλητής συστοιχίας και το μέγεθος καθορίζει τον αριθμό του στοιχείου που θα κατέχει.

Για παράδειγμα, αν θέλουμε να δηλώσουμε έναν πίνακα που θα περιέχει το υπόλοιπο κάθε μήνα του έτους.

 // παράδειγμα int month_balance [12]. 

Το Month Balance είναι η μεταβλητή πινάκων που θα κρατήσει τους ακέραιους αριθμούς, οι οποίοι θα αντιπροσωπεύουν το υπόλοιπο κάθε μήνα. Τώρα, αν θέλουμε να έχουμε πρόσβαση στην ισορροπία του μήνα Απρίλιο, έπρεπε απλώς να αναφέρουμε το όνομα της μεταβλητής που ακολουθείται από τετράγωνο υπόβαθρο που περιέχει την τιμή του δείκτη για τον μήνα Απρίλιο, δηλαδή το 'month_balance [3]'. Αλλά επειδή ο 'Απρίλιος' είναι ο τέταρτος μήνας του έτους αλλά είχαμε αναφέρει '[3]' επειδή όλες οι συστοιχίες έχουν 0 ως δείκτη του πρώτου τους στοιχείου.

Στην Java, αυτό μπορεί να γίνει ως

 // δήλωση σε τύπο Java variable_name []; variable_name = νέος τύπος [μέγεθος]; 

Εδώ, αρχικά είχαμε δηλώσει μια μεταβλητή πίνακα με τον τύπο της και στη συνέχεια είχαμε μοιράσει τη μνήμη σε αυτήν χρησιμοποιώντας το 'new' και το assign 'new' στη δηλωμένη μεταβλητή πίνακα. Ας πάρουμε το παραπάνω παράδειγμα αν θέλουμε να δηλώσουμε έναν πίνακα που θα περιέχει το υπόλοιπο σε κάθε μήνα του έτους.

 // παράδειγμα int month_balance []; month_balance = νέο int [12]. 

Εδώ, το "νέο" διαθέτει μνήμη στη μεταβλητή πίνακα "month_balance", έτσι τώρα, το mont_balance θα κρατήσει τώρα τη μνήμη για 12 ακέραιες τιμές.

Οι πίνακες μπορούν να αρχικοποιηθούν όταν δηλωθούν. Ένας αρχικοποιητής συστοιχιών είναι ο κατάλογος των τιμών που χωρίζονται με κόμματα και περιβάλλεται από σγουρά.
//παράδειγμα

 int month_balance = {100, 500, 200, 750, 850, 250, 630, 248, 790, 360, 450, 180}. 

Ορισμός διδιάστατου πίνακα (συστοιχία 2-D)

Τόσο η C ++ όσο και η Java υποστηρίζουν πολυδιάστατο πίνακα. Μία από τις απλούστερες μορφές μιας πολυδιάστατης συστοιχίας είναι ένας πίνακας δύο διαστάσεων ή ένας πίνακας 2-D. Μια συστοιχία δύο διαστάσεων μπορεί να θεωρηθεί ως «συστοιχία συστοιχιών» ή «συστοιχία μονοδιάστατων συστοιχιών». Για να δηλώσουμε τη μεταβλητή πίνακα δύο διαστάσεων, πρέπει να καθορίσουμε το όνομα της συστοιχίας ακολουθούμενο από δύο αγκύλες, όπου ο δεύτερος δείκτης είναι το δεύτερο σύνολο αγκυλών.

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

Στην C ++, ο δισδιάστατος πίνακας δηλώνεται ως?

 // δήλωση σε τύπο C ++ variable_name [size1] [size2]; 

Για παράδειγμα, θέλουμε να αποθηκεύουμε το υπόλοιπο κάθε 30 ημέρες σε κάθε μήνα του έτους, σε μια συστοιχία 2-D.

 // παράδειγμα int month_balance [12] [30]. 

Στην Java, ο δισδιάστατος πίνακας αποκτάται από το

 // δήλωση σε τύπο Java variable_name = new int [size1] [size2]; // παράδειγμα int month_balance = new int [12] [30]; 

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

 // παράδειγμα σε Java void receivinging_funct (int a [] [10]) {. . . }} 

Όταν η μνήμη είναι δυναμικά κατανεμημένη στον δισδιάστατο πίνακα Java, καθορίζεται το αριστερότερο ευρετήριο και οι υπόλοιπες διαστάσεις μπορούν να διανεμηθούν χωριστά, δηλαδή όλες οι σειρές του πίνακα ενδέχεται να μην έχουν το ίδιο μέγεθος.

 // παράδειγμα στην Java int month_balance = new int [12] []; month_balance [0] = νέο int [31]; month_balance [1] = νέο int [28]. month_balance [2] = νέο int [31]. month_balance [3] = νέο int [30]. month_balance [4] = νέο int [31]; month_balance [5] = νέο int [30]. month_balance [6] = νέο int [31]. month_balance [7] = νέο int [30]; month_balance [8] = νέο int [31]; month_balance [9] = νέο int [30]. month_balance [10] = νέο int [31]. month_balance [11] = νέο int [30]. month_balance [12] = νέο int [31]; 

Αλλά δεν υπάρχει κανένα πλεονέκτημα από αυτό.

Βασικές διαφορές μεταξύ μονοδιάστατου και δισδιάστατου πίνακα

  1. Ο μονοδιάστατος πίνακας είναι ένας κατάλογος των οποίων τα στοιχεία έχουν παρόμοιο τύπο δεδομένων. Από την άλλη πλευρά, ο δισδιάστατος πίνακας είναι μια λίστα των οποίων τα στοιχεία είναι η σειρά παρόμοιου τύπου δεδομένων.
  2. Στην C ++, όταν η μονοδιάστατη διάταξη λαμβάνεται από την παράμετρο μιας συνάρτησης λήψης, δεν είναι απαραίτητο να αναφερθεί το μέγεθος της συστοιχίας καθώς ο μεταγλωττιστής κατανοεί ότι η διάταξη του τύπου (αναφερόμενο τύπος δεδομένων μαζί με την παράμετρο) με κάποιο μήκος πρέπει να ληφθεί. Σε μια δισδιάστατη συστοιχία, ο δεύτερος ή ο δεξιός δείκτης πρέπει να καθοριστεί καθώς ο μεταγλωττιστής πρέπει να γνωρίζει πού ξεκινά ένα τέλος μιας γραμμής και μια νέα σειρά.
  3. Στην C ++, ο μονοδιάστατος πίνακας αποθηκεύεται σε μια συνεχόμενη θέση μνήμης με την ευρετηριζόμενη σειρά, ενώ η δισδιάστατη διάταξη αποθηκεύεται επίσης στην παρακείμενη θέση μνήμης, αλλά καθώς υπάρχουν πολλές σειρές σε μια δισδιάστατη συστοιχία, η αποθήκευση μια πρώτη σειρά ακολουθείται από ένα δεύτερο και το τρίτο και ούτω καθεξής.

Σημείωση:

Το πέρασμα τόσο της μονοδιάστατης συστοιχίας, όσο και της δισδιάστατης συστοιχίας σε μια συνάρτηση είναι παρόμοια, δηλαδή και οι δύο διαβιβάζονται μόνο από το όνομα της συστοιχίας

 // παράδειγμα pass_funt (name_of_array); 

Συμπέρασμα:

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

Top