Γιατί αυτή η λειτουργία αναζήτησης επιστρέψει ένα δείκτη σε ένα δείκτη;

ψήφοι
1
#ifndef _BST_H_

/* Returns negative (left<right), zero (left==right), or positive (left>right). */
typedef int comparator(void* left, void* right);

struct bst_node {
    void* data;
    struct bst_node* left;
    struct bst_node* right;
};

struct bst_node* new_node(void* data);
void free_node(struct bst_node* node);
struct bst_node** search(struct bst_node** root, comparator compare, void* data);
void insert(struct bst_node** root, comparator compare, void* data);
void delete(struct bst_node** node);

#endif

Αυτό είναι ένα αρχείο μπάλα. Δεν καταλαβαίνω για searchτη λειτουργία, γιατί είναι ο τύπος επιστροφής node**;

Επιμέλεια: πρόσθεσε λει αναζήτηση εδώ:

struct bst_node** search(struct bst_node** root, comparator compare, void* data) {
    struct bst_node** node = root;
    while (*node != NULL) {
        int compare_result = compare(data, (*node)->data);
        if (compare_result < 0)
            node = &(*node)->left;
        else if (compare_result > 0)
            node = &(*node)->right;
        else
            break;
    }
    return node;
}
Δημοσιεύθηκε 21/03/2011 στις 05:46
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
2

Θα ήθελα να μαντέψει ότι η συνάρτηση επιστρέφει ένα δείκτη σε δείκτη έτσι ώστε να σας searchλειτουργία μπορεί να χρησιμοποιηθεί για την εφαρμογή της insert. Αν searchεπιστρέφει μόνο ένα δείκτη σε ένα κόμβο και ο κόμβος δεν βρεθεί, τότε θα πρέπει να περπατήσετε το δέντρο και πάλι να καταλάβω τι pointer θα πρέπει να επανακαλωδίωναν να κάνει μια εισαγωγή. Αν αντί να επιστρέφει ένα δείκτη στο δείκτη κόμβο που κατέληξε να είναι μηδενική, τότε insertμπορεί να εφαρμοστεί από μόνο η ανακατανομή αυτό το δείκτη στο σημείο στο νέο κόμβο που πρέπει να εισαχθεί.

Απλά μια εικασία.

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

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