Μνήμη και δείκτες σε ένα BST

ψήφοι
0

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

Ο κώδικας:

 public void setParent(Person parent) {
  parent = new Person( parent.getName(), parent.getWeight());

Το παράδειγμα κώδικα που ενέπνευσε τον κωδικό:

 public void setParent(Node parent) {
  this.parent = parent;
 }
Δημοσιεύθηκε 14/11/2011 στις 02:47
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
2

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

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

Η this.parentείναι μια αναφορά στο τρέχον αντικείμενο του parentδείκτη.

Αυτό δεν σημαίνει ότι στην πραγματικότητα thisείναι ένας γονέας. Στην πραγματικότητα, this.parentχρησιμοποιείται για να διακρίνει το τοπικό parentδείκτη από την εισερχόμενη παράμετρο parent.

class Person{
    Person parent; // <---- this is the "this.parent" attribute, and is initially undefined
    public void setParent(Person parent){ // <---- the "Person parent" on this line is an incoming parameter
        this.parent = parent; //<---- "this.parent" refers to the attribute, and "parent" refers to the parameter
    }
}
Απαντήθηκε 14/11/2011 στις 02:52
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more