push() Funktion ohne Zeiger



  • Hallo!
    Ich möchte mir die push-Funktion ohne Zeiger bauen und mein Algorithmus dazu scheint mir eigentlich ganz plausibel zu sein, funktioniert aber trotzdem nicht so wie ich mir das vorstelle. Und zwar muss der (Denk-?)Fehler in der for-Schleife sein, die die Elemente in stack[] um eine Stelle weiterschieben soll, so dass die "eingabe" an die position stack[0] geschrieben werden kann ohne dass die zuvor gemachten Eingaben verloren gehen. Allerdings schreibt er die "eingabe" immer an diese Stelle, aber das Array enthält nach jeder Eingabe eine neue Position mit dem Inhalt 0.

    int push(int eingabe)
    {
      //Wenn mehr reingepackt wird als reinpasst, gib Fehlercode -1 zurück
      if(pos==ANZ_MAX)
          {
          printf("Stack voll");
          return(-1);
          }
          pos++;
      //Schiebe die Elemente von hinten beginnend immer um eins weiter;
      for(i=pos;i==0;i--)
      {
      stack[i-1]=stack[i];
      }
      //Schreibe an die Stelle [0] im Stack die eingabe
      stack[0]=eingabe;
    
    for(z=0;z<=pos;z++)
       printf("stack[%i]:%i\n", z, stack[z]);
    
    return(eingabe);
    }
    

    Hoffe, mir ist noch zu helfen 😉

    Liebe Grüße, Madman



  • Hi,

    hier scheint was falsch:

    for(i=pos;i==0;i--)
    

    Die Schleife wird nur ausgeführt, solange i gleich 0 ist.



  • SeppSchrot schrieb:

    Die Schleife wird nur ausgeführt, solange i gleich 0 ist.

    Wie muss ich denn die Schleife laufen lassen damit es stimmt? Ich kann ja nur von der letzten Position mit dem verschieben anfangen, da ich mir sonst eine Stelle nach der Anderen überschreiben würde.



  • Eigentlich verschiebt man die Elemente in einem Stack nicht, sondern packt immer nur oben etwas rauf und erhöht die Position um eins.

    Trozdem:
    Wenn du eine Schleife möchtest, die ausgeführt wird, bis i = 1 ist, schreibst du:
    for(i=pos;i>0;i--)

    BTW: Ist dein Stack ein Array der Größe ANZ_MAX ?
    Dann scheinst du außerdem eine Bereichsübertretung zu haben...



  • SeppSchrot schrieb:

    Eigentlich verschiebt man die Elemente in einem Stack nicht, sondern packt immer nur oben etwas rauf und erhöht die Position um eins.

    Deswegen muss ich (im LIFO-Stack) die Stelle stack[0] ja verschieben. Und Pos erhöht sich auch um 1. Aber ich glaub ich habe den Fehler gefunden. Einerseits lief die Schleife wirklich falsch, und das Andere war, dass es lauten muss:

    stack[i]=stack[i-1];
    

    Ist wahrschinlich nicht die optimale Lösung, aber es läuft!
    Danke für die Hilfe!

    🙂 😃


Anmelden zum Antworten