Generic datastructures σε C

ψήφοι
2

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

typedef struct
{
   void *data;
   struct TreeNode *left;
   struct TreeNode *right;  
} TreeNode;

Ωστόσο, όταν γράφω προσθέσετε / αφαιρέσετε, θα πρέπει να κάνετε συγκρίσεις, ως εκ τούτου, θα πρέπει να παρακολουθείτε το είδος των δεδομένων που «δεδομένα» είναι στραμμένη σε αυτά, έτσι δεν είναι;

Βασική ιδέα είναι να έχουμε μια NODE_TYPE απαρίθμησης και μια λειτουργία compareTreeNodes που δέχεται τις δύο TreeNodes και το απαρίθμησης ως 3ο arg. Αυτό θα επιτρέψει τη λειτουργία για να καθορίσει τι πρέπει να ρίξει το κενό * να.

Κάθε άλλο / καλύτερη σκέψεις;

Δημοσιεύθηκε 14/10/2010 στις 14:35
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
4

Ωστόσο, όταν γράφω προσθέσετε / αφαιρέσετε, θα πρέπει να κάνετε συγκρίσεις, ως εκ τούτου, θα πρέπει να παρακολουθείτε το είδος των δεδομένων που «δεδομένα» είναι στραμμένη σε αυτά, έτσι δεν είναι;

Κοίτα πώς qsort()λύνει αυτό το πρόβλημα. Είναι, επίσης, πρέπει να εργαστούμε για την αυθαίρετη τύπους δεδομένων. Βασικά, μπορείτε να μεταβιβάσει σύγκριση με τους χρήστες, μέσω ενός δείκτη λειτουργίας.

Απαντήθηκε 14/10/2010 στις 14:38
πηγή χρήστη

ψήφοι
3

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

typedef struct {
    TreeNode *root;
    int (*compar)(const void *, const void *);
} Tree;

Btw, η πρώτη σας γραμμή θα πρέπει πιθανώς να είναι typedef struct TreeNode {. Έχετε μια typdef'd ανώνυμα struct, αλλά αναφέρονται σε μια ανύπαρκτη tagged struct μέσα. Αυτές οι δύο εκδόσεις θα μπορούσε να λειτουργήσει:

typedef struct TreeNode {
    void *data;
    struct TreeNode *left, *right;
} TreeNode;

typedef struct TreeNode TreeNode;
struct TreeNode {
    void *data;
    TreeNode *left, *right;
};

Δεν μπορείτε να κάνετε αυτο-αναφορική ανώνυμα structs.

Απαντήθηκε 14/10/2010 στις 14:42
πηγή χρήστη

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