Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 14. Nov 2018 18:45

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Eintrag in Binärbaum ändern
BeitragVerfasst: 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:
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;
    }
}


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23. Jun 2007 8:20 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23. Jun 2007 10:27 
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?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 25. Jun 2007 16:37 
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;
}


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de