Prob: Löschen in Cursorverkettete Liste

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von T3c4n01d, 7. September 2005 .

Schlagworte:
  1. 7. September 2005
    Hi,

    Ich hab ein Problem beim Löschen in einer Cursorverketteten Liste.

    Ich habe mir das bislang so gedacht:
    Code:
    void entfernen(G & g, P p) {
    
     delMem(g.grupp,p);
     P tmp=get(g.grupp,p).cursor;
     get(g.grupp, p-1).cursor=tmp;
     g.akt--;
     }
    die Fuktionen delMem und get sehen so aus:

    Code:
    void delMem(M & m, P p) { m.frei[p]='f'; }
    KN & get(M & m, P p){return m.gr[p];}
    Die Liste sieht folgendermaßen in der Header Datei aus:

    Code:
    typedef int P;
    
    struct KN
    { S st;
     P cursor;
    };
    struct M
    { //DS ist Feld
     static const int maxAnz = 7;
     KN gr[maxAnz];
     char frei[maxAnz];
    };
    Bislang siehts so aus, dass man zwar Positionen entfernen kann; wenn man allerdings "hinter" dem gelöschten Objekt nochmal löschen möchte funzt es nicht. Vor der Position funktionierts noch.

    Kann mir da jemand einen Tip geben. Hab da ne Denkblockade.

    THX im vorraus.

    MfG
     
  2. 13. September 2005
    So ich habs jetzt.

    Waynes interessiert:

    Code:
    void entfernen(G & g, P p) {
    
    
     for (int i=p;get(g.grupp,i).cursor != g.letzt; i=get(g.grupp,i).cursor)
     {
    
     S tmp=get(g.grupp,i+1).st; //Verschieben um eine Pos
     get(g.grupp, i).st=tmp;
     }
    
     delMem(g.grupp,ende(g)); //Speicherplatz leeren
     get(g.grupp,g.akt).cursor=g.letzt; //neue letzte Pos
     g.akt--; //akt.Anz Knoten verringern
    
     }
    

    Vielleicht fällt jemanden auch noch ne bessere Lösung ein. Der kann sich ja mal per PN melden.

    Sonst würd ich sagen mach ich mal dicht.

    MfG
     
  3. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.