سؤال

وأنا مبتدئ جدا في C. ومع ذلك، أنا بحاجة إلى البرنامج الذي يحل مشكلة بالنسبة لي. كيف يمكنني أن أفعل ما يلي؟

وأحتاج إلى هيكل شجرة. هذه ليست شجرة التقليدية، كل ورقة يمكن أن يكون مختلف العديد من يورق. لذلك يجب أن تحتوي كل ورقة قائمة مرتبطة الذي يحتوي على الأطفال من ورقة. في كل وصلة هناك شار [] [] - مجموعة وبعض المتغيرات كثافة العمليات التي تحكي كيف جيدة ورقة هي. ومن ثم لا بد لي من القيام ببعض البحث على أحسن وجه والعشرين للعثور على أفضل شار [] [] - مجموعة، وإخراجه. إذا وجدت مجموعة مناسبة، وأنا يمكن أن تتوقف الشجرة المشي.

هل كانت مفيدة؟

المحلول

والبيانات، ويهمني ان تبقي قائمة مرتبطة مرتبة في وقت الإدراج، بحيث يمكنك دائما العودة البند الأول القائمة في عقدة شجرة.

شيء على غرار

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;
}

نصائح أخرى

وarrayindex هو معلومات الموقع حتى على المزيد من المعلومات من العناصر الفعلية هي مؤشر، arrayelement والبيانات، كلمات جيدة <في أ href = "http://en.wikipedia.org/wiki/Ford٪E2٪80٪93Fulkerson_algorithm" يختلط = " نوفولو noreferrer "> fordfulkersson أو TRIE نماذج بيانات للكيمياء، شجرة باير لالكلاسيكية المنطق، breadthfirstsearch، التوافق DBS، heapstructure أو أي كومة (LIFO)

والدراسة حتى على هياكل البيانات والخوارزميات ... ويكيبيديا هي مكان جيد للبحث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top