Είναι ισχυρός λόγος να μην περιλαμβάνουν πολλαπλές δείκτες κόμβο σε κόμβο για χρήση σε περισσότερες από μία δομή δεδομένων;

ψήφοι
0

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

struct treeNode
{
    data * item;
    treeNode *left, *right;
};

struct listNode
{
    data * item;
    listNode *next, *prev;
};

class collection
{
public:
         ........
}

Όταν τα δεδομένα είναι μια κατηγορία που περιέχει τα στοιχεία της κάθε εγγραφής. Προφανώς, όπως είναι συσταθεί, ένας TreeNode δεν μπορεί να υπάρξει στη συνδεδεμένη λίστα.

Δεν θα ήταν πολύ πιο απλό να:

struct node
{
    data * item;
    node *listNext, *listPrev, *treeLeft, *treeRight;
};

τότε μπορούμε να δηλώσουμε:

node * listHead;
node * treeRoot;

και περιλαμβάνουν τόσο αλγόριθμοι εισαγωγή μέσα στην τάξη.

Είναι κάτι που είμαι λείπει εκεί;

Δημοσιεύθηκε 09/03/2011 στις 19:33
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
0

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

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

Απαντήθηκε 09/03/2011 στις 21:08
πηγή χρήστη

ψήφοι
0

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

Έτσι, με ότι είπε, δεν θα μπορώ να την αποθήκευση της μνήμης; Ο συνδυασμός των 2 κόμβων θα καταλήξετε με 5 δείκτες, αν έφυγα από τους χωρίσει θα ήθελα να χρησιμοποιούν 6. Επίσης, πραγματικά έχουν μόνο μία ομάδα δεδομένων με αυτόν τον τρόπο. αν είχα 250 σημεία δεδομένων για να παρακολουθείτε, θα είχα μια ομάδα 1250 δείκτες αντί για 2 λίστες 750. Ίσως είμαι παρεξήγηση τι πραγματικά γίνεται διατεθεί με τις κλήσεις δείκτη.

Απαντήθηκε 09/03/2011 στις 21:59
πηγή χρήστη

ψήφοι
0

Ποια ήταν η απάντηση;

Εάν τα δεδομένα σας είναι μικρότερη από (χμμμ) megabytes, μην ανησυχείτε για την κατανάλωση της μνήμης. 1 ή 2 Gigabytes είναι τυπικό στην κανονική υπολογιστές σήμερα.

Πόσο μεγάλη είναι τα στοιχεία; 32 char; 64k πεπιεσμένου πολυμέσων; Κάτι μεγάλο;

Πόσο λογικό είναι να οργανώσει ένα στοιχείο χρησιμοποιώντας και τις δύο τεχνικές; Αν τα στοιχεία είναι πραγματικά η ίδια, στη συνέχεια, μια δομή 5 δείκτης ενδιαφέροντα- κάποιος θα μπορούσε να βρει έναν κόμβο σε μια παραγγελία και στη συνέχεια περιηγηθείτε σχετίζονται με κόμβους στην άλλη παραγγελία.

Είναι τα στοιχεία που δεν σχετίζονται, μερικές κιμωλία, λίγο τυρί; Είναι πολυδιάστατο; αρχεία του προσωπικού; Οι ηχητικές περιγραφές αρχείο; Συνταγές;

Στο σχολείο, ένας καλός δάσκαλος προσπαθεί να δώσει την εμπειρία σας με κοινές τεχνικές και κλάδων. Ακριβώς όπως τάξη της τέχνης, ή σύνθεση. Μολύβι, παστέλ, 5 παράγραφος δοκίμιο. Έτσι, ο δάσκαλος μπορεί να θέλει να γράψει δύο διαφορετικές κατηγορίες και κατασκευαστές. Χρησιμοποιήστε ένα struct για ένα μέρος των δεδομένων, διαφορετικό για άλλα δεδομένα. Ή το ίδιο. Απλά επειδή.

Έξω από το σχολείο, τα δεδομένα έρχεται σε μορφή και υπάρχουν λειτουργίες που θέλετε για το / με αυτό. «Χρήση περιπτώσεις» είναι ιστορίες για το πώς χρησιμοποιούνται τα δεδομένα, τι πρέπει να διατηρηθεί, τι αλγόριθμοι χρησιμοποιούνται.

Το σημείο αυτό θα μπορούσε να είναι δικόρυφη αναζήτηση, 2 ζεύγη ορθογωνίων δείκτες. Θα μπορούσε να είναι Σωματεία, όπου κάθε στοιχείο asssociated με έναν κατάλογο ή ένα δέντρο, αλλά όχι και τα δύο ταυτόχρονα. Θα μπορούσε να είναι μια αναταραχή των lightwieght υποσύνολα, τα δέντρα και τους καταλόγους, που συγκρίνονται και αντιπαραβάλλονται ...

Σε περίπτωση αμφιβολίας, «δομές δεδομένων + αλγορίθμων = προγράμματα». Αλλά πληρώνει για να ξέρει ποιο σημείο ο δάσκαλος προσπαθεί να κάνει, και αν θέλετε να ακολουθήσουν το παράδειγμά τους. (Συνήθως, στο σχολείο, το κάνετε.)

Απαντήθηκε 12/04/2011 στις 01:51
πηγή χρήστη

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