Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Eintrag in Binärbaum ändern

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
sesame
Gast





BeitragVerfasst am: 22. Jun 2007 18:20   Titel: Eintrag in Binärbaum ändern

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:

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

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 23. Jun 2007 8:20   Titel:

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.
 
Benutzer-Profile anzeigen Private Nachricht senden

sesame
Gast





BeitragVerfasst am: 23. Jun 2007 10:27   Titel:

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

Mittels

Code:

    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
Gast





BeitragVerfasst am: 25. Jun 2007 16:37   Titel:

so geht's:

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

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy