Eintrag in Binärbaum ändern

Antworten
Nachricht
Autor
sesame

Eintrag in Binärbaum ändern

#1 Beitrag von sesame » 22. Jun 2007 18:20

Hallo,

hat jemand eine Idee, wie ich einen Datensatz in einem binären Suchbaum ändern kann?

Der Suchbaum funktioniert schon gut, nur bekomme ich die einmal eingelesenen Einträge nicht geändert (nicht löschen).

Die Struktur dazu:

Code: Alles auswählen

struct binaer_knoten{
    char name[MAX];
    int nummer;
    int bestand;
    struct binaer_knoten *links;
    struct binaer_knoten *rechts;
}var1;

struct binaer_baum{
    struct binear_knoten *root;
    int counter;
};

struct binaer_baum *init(void) {
    struct binaer_baum *baum =(struct binaer_baum *)
    malloc(sizeof *baum);
    if(baum == NULL) {
        fprintf(stderr, "Speicherplatzmangel!\n");
        return NULL;
    }
    else { /*Initialisieren*/
        baum->root = NULL;
        baum->counter=0;
        return baum;
    }
}

Benutzeravatar
Janka
Beiträge: 3585
Registriert: 11. Feb 2006 19:10

#2 Beitrag von Janka » 23. Jun 2007 8:20

Was ist dein Schlüssel? "name"? Den darfst du sowieso nicht ändern, denn damit müsste sich die Position des Objekts in deinem Baum ändern.

Ansonsten verstehe ich dein Problem nicht. Ändern der anderen Werte ist Zugriff auf die Punkte der Struct mittels -> .

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

sesame

#3 Beitrag von sesame » 23. Jun 2007 10:27

danke für die antwort. jetzt scheine ich mein problem lokalisiert zu haben.

Mittels

Code: Alles auswählen

    const struct binaer_knoten *knoten;
...
printf("\nBitte neuen Bestand des Artikels eingeben : ");
            scanf("%i", &bestand);
            binaere_suche(re, nummer);
            knoten->bestand=bestand;
            printf("Neuer Bestand: %i\n", knoten->bestand);
soll der nach der Nummer sortierte Datensatz geändert werden (nur der Bestand, Rest bleibt). Damit entfällt auch ein neu einsortieren.

Das jetzige Problem: "Fehler: Zuweisung der schreibgeschützten Speicherstelle".

Wie kann ich den Bestand ändern?

sesame

#4 Beitrag von sesame » 25. Jun 2007 16:37

so geht's:

Code: Alles auswählen

int aendern( struct binaer_baum *baum, int nummer) {
    struct binaer_knoten *knoten;
    
    /* Zuerst an die Wurzel */
    knoten = (struct binaer_knoten *) baum->root;
    for(;;) {
        if(knoten == NULL) {
            printf("Keine erfolgreiche Suche!\n");
            return;
        }
        if(nummer == knoten->nummer) {  /* Gefunden */
            printf("Artikelnr.: %d \nName: %s\n", nummer, knoten->name);
            printf("\nneuen Bestand eingeben: ");
            scanf("%i", &knoten->bestand);
            printf("\nneuer Bestand: %i\n\n", knoten->bestand);
            return;
        }
        else if(nummer > knoten->nummer)   /* Gesuchtes Element größer  */
            knoten=knoten->rechts;  /* Rechts am Baum weiter     */
        else                       /* Gesuchtes Element kleiner */
            knoten=knoten->links;   /* Links am Baum weiter      */
    }
    return nummer;
}

Antworten