Domanda

Sono un principiante in C. Tuttavia, ho bisogno di un programma che risolva un problema per me. Come posso fare quanto segue?

Ho bisogno di una struttura ad albero. Questo non è un albero tradizionale poiché ogni foglia può avere varie foglie. Pertanto ogni foglia dovrebbe contenere un elenco collegato che contiene i figli della foglia. In ogni collegamento è presente un array char [] [] e alcune variabili int che indicano quanto è buona una foglia. E poi devo fare qualche ricerca prima di tutto per trovare il miglior char [] [] - array e produrlo. Se ho trovato un array adatto, posso fermare la camminata dell'albero.

È stato utile?

Soluzione

Io, terrei la lista collegata ordinata al momento dell'inserimento, in modo da poter sempre restituire la prima voce della lista in un nodo dell'albero.

Qualcosa sulla falsariga di

struct listnode {
    char** data;
    int quality;
    struct listnode* next;
};

struct treenode {
    struct treenode* left;
    struct treenode* right;
    int key;
    struct listnode* list;
};


struct treenode* tree_insert(struct treenode* root, int key, int quality, char** data)
{
    if(root == NULL) {
        root = treenode_alloc();
        root->key = key;
        root->list = list_insert(root->list, quality, data);
        return root;
    }

    if(key < root->key) {
        root->left = tree_insert(root->left, key, quality, data);
    } else if(key > root->key) {
        root->right = tree_insert(root->right, key, quality, data);
    } else {
      //key == root->key
      root->list = list_insert(root->list, quality, data);
    }
    return root;
}

struct listnode* list_insert(struct listnode* head, int quality, char** data) {
    struct listnode* prev = NULL;
    struct listnode* ins = NULL;
    struct listnode* ptr = NULL;
    if(head == NULL) {
        head = listnode_alloc();
        head->quality = quality;
        head->data = data;
        return head;
    }
    ptr = head;

    while(quality < ptr->quality) {
        if(ptr->next == NULL) { //we reached end of list
            ptr->next = list_insert(NULL, quality, data);
            return head;
        }

        prev = ptr;
        ptr = ptr->next;
    }

    //insertion into middle of list (before ptr, because ptr->quality >= quality)
    ins = listnode_alloc();
    ins->quality = quality;
    ins->data = data;
    ins->next = ptr;
    if(prev) {
        prev->next = ins;
    }
    return head;
}

Altri suggerimenti

arrayindex sono le informazioni sulla posizione, quindi più informazioni rispetto agli elementi reali sono indice, arrayelement è dati, buone parole chiave fordfulkersson , trie datamodel per chimica, b-tree per classico logica, breadthfirstsearch, concordance dbs, heapstructure o vale a dire stack (LIFO)

studia su Data Structures & amp; Algoritmi ... Wikipedia è un buon posto dove guardare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top