doppelt verkette liste die xte



  • Moin, Moin,
    ich bin gerade dabei mit etwas pascal-wissen auf c++ umzusteigen. zur übung übersetze ich unsere informatik-aufgaben. bei einem einfachen beispiel für eine doppelt verkettete liste komme ich allerdings nicht weiter, obwohl sie unter tp lief und der compiler(Dev-C++) keine Fehler mehr beanstandet. wahrscheilich habe ich einige sachen noch nicht ganz verstanden, aber gerade darum frage ich ja nach, ob mir jemand erkären kann, was ich falsch gemacht habe
    wenn ich das program starte stürzt es nach der ausgabe "a=zurueck; s=raus; d=vorwaerts" ab, da ich win-xp benutze ist das bei mir ungefährlich, aber wer mir helfen kann, kennt wahrscheinlich auch die gefahren

    #include <stdio.h>
    struct listobject
    {
            int nr;
            listobject *fwd,*bak;
    };
    listobject *start, *run;
    void fill(int run2)
    {
         listobject first;
         first.nr=0;
         first.fwd=0;
         first.bak=0;
         start=&first;
         run=&first;
         for(int alpha=1;alpha<=run2;++alpha)
         {
                 listobject now;
                 now.nr=alpha;
                 now.fwd=0;
                 now.bak=run;
                 run->fwd=&now;
                 run=&now;
         }
    }
    void updown(int run2)
    {
         run=start;
         for(int alpha=0;alpha<=run2;++alpha)run=run->fwd;
         printf("\n%d",run->nr);
         char key;
         while(key!='s')
         {
         key=getchar();
         if(key=='a')
                     {
                     if(!run->bak)while(run->fwd)run=run->fwd;
                     run=run->bak;
                     }
         if(key=='d')
                     {
                     if(!run->fwd)run=start;
                     run=run->fwd;
                     }                                
         printf("\n%d",run->nr);  
         }
    }
    
    main()
    {
          int ask;
          printf("Maximum?");
          scanf("\n%d",&ask);
          fill(ask);
          printf("Bei welcher Zahl einsteigen?");
          scanf("\n%d",&ask);
          printf("a=zurueck; s=raus; d=vorwaerts");
          updown(ask);
          scanf("\n%d",ask);//damit das programm nicht am ende nicht einfach schliesst
    }
    


  • Versuchs mal im C-Subforum, weil, das ist kein C++. 😃 😃 😃



  • hmm wenn c++, dann musst du irgendwo noch zeiger herstellen, die auf objekte zeigen, die du mit new alloziierst hast...
    ist in pascal ja genauso 😉

    irgendwie ähnlich so, aber ist nur ein anfang.. voll ungeprüft und logik fehlt!!
    nur als ansatz

    wenn du weiterhin c machst, musst du die analogen methoden zur speicheralloziierung nutzen.

    void fill(int run2)
    {
         listobject *first= new listobject();
         first->nr=0;
         first->fwd=0;
         first->bak=0;
         start=first;
         run=first;
         for(int alpha=1;alpha<=run2;++alpha)
         {
                 listobject *now=new listobject();
                 now->nr=alpha;
                 now->fwd=0;
                 now->bak=run;
                 run->fwd=now;
                 run=now;
         }
    }
    


  • Erst einmal Dankeschön, jetzt läufts schon mal fehlerfrei, und hierbei kommt es ja nicht auf schönheitsfehler an. bis ich den unterschied c/c++ kapiert hab wirds wohl wahrscheinlich noch dauern, aber ich hab ja auch grade mal die hälfte vom ebook durch


Anmelden zum Antworten