Zum Inhalt springen

Zwei Queues zu einem Stack Fehler im Programm


Empfohlene Beiträge

Geschrieben

Habe mein Programm sowei fertig! Jetzt bin ich grade an den Umlauten am tüfteln! Hab mich entschieden es mithilfe von z.B. \x81 für ü zu lösen!

Nur mein Problem ist, dass wenn ich nun als Beispiel "über" schreiben will er mir das nicht als ü schreibt weil vermutlich \x81e ein anderes Zeichen ist. Wie kann ich das lösen ohne das ich ein Leerzeichen üm Wort machen muss?

Geschrieben

Für alle die mir geholfen haben: Vielen Dank!

Ich poste hier auch nochmal den fertigen funktionierenden Code



//  Aufgabe 3b:

//  Realisieren Sie einen Stack als Liste unter Verwendung zweier Queues in C.

//  Beachten Sie, dass nur die für Queues erlaubten Funktionen verwendet werden.


#include <stdio.h>

#include <stdlib.h>


typedef struct node *Zeiger;

typedef struct node          //Alias der Liste = NODE

 {                   

  Zeiger next; 

  int zahl;           

 } NODE;


Zeiger p, q, First, Last;      //Q1 - First=Anker, Last=Zeiger auf das Ende der Liste, q=Zeiger auf ein neues Element, p=Entnahmezeiger

Zeiger x, y, Erstes, Letztes;  //Q2 - Erstes=Anker, Letztes=Zeiger auf das Ende der Liste, y=Zeiger auf ein neues Element, x=Entnahmezeiger


int main ()                   //Hauptprogramm

{

     int N, i;                 //N=Länge der Liste, i= Laufindex

     First = NULL;


     printf("\n Dieses Programm erstellt eine Queue mit der von Ihnen angegebenen \n");

     printf(" Listenl\x84nge und f\x81llt diese mit den Zahlen 1-2-3-4.... Diese Zahlen\n");

     printf(" werden dann mit Hilfe von Umschichtprozessen \x81\x62\x65r ein zweites Queue \n");

     printf(" in der Reihenfolge eines Stacks ausgegeben\n Bitte geben sie die L\x84nge ein: ");  // Abfragen

     scanf("%d",&N);           // und Einlesen wie lang die Liste wird

     printf(" \n Der Stack sieht folgenderma\xE1\x65n aus: \n\n");


     //Füllen von Queue1

     First=(Zeiger) malloc(sizeof(NODE)); First->zahl=1; //Neuer Speicher Anfordern

     Last=First; Last->next = NULL;                      //Last Zeiger auf erstes Element, Next-Zeiger aus Element wo Last drauf zeigt=NULL

     for (i=2; i<=N; i++)

     {

         q = (Zeiger)malloc(sizeof(NODE));

         q->zahl=i;                                      //Zahl in das Element von q schreiben

         q->next = NULL;                                 //Next-Zeiger von Element von q=NULL

         Last->next =q;                                  //Next-Zeiger von Element wo Last drauf zeigt auf q

         Last = q;                                       //Last Zeiger auf Element von q schieben

     }


     while (N>=2)

     //Solange die Länge der Liste größer oder gleich 2 ist tue das:

     {


       //Umschichten von 1 in 2


        //Anlegen der zweiten queue mit dem ersten Element von q1

        Erstes=(Zeiger) malloc(sizeof(NODE));//Neuer Speicher Anfordern

        Erstes->zahl=First->zahl;            //Zahl aus dem Element wo "First" drauf zeigt in Element wo "Erstes" drauf zeigt schreiben

        Letztes=Erstes; Letztes->next = NULL;//"Letztes" Zeiger auf erstes Element, Next-Zeiger aus Element wo "Letztes" drauf zeigt=NULL

        //Löschen des ersten Elements von q1

        p = First;                           //Element wo First drauf zeigt mit p markieren,

        First = First->next;                 //First auf nächstes Element (Wo Next-Zeiger von mit First markiertem Elemen drauf gezeigt hat) schieben

        p->next = NULL; free(p);             //Next-Zeiger von Element wo p drauf zeigt=NULL; Speicher freigeben


        for (i=1; i<=N-2; i++)

        {        

           //Einlesen der Zahl aus dem ersten Element von q1

           y = (Zeiger)malloc(sizeof(NODE)); //Neuer Speicher Anfordern

           y->zahl=First->zahl;              //Die zahl aus dem Element wo "First" drauf zeigt in das Element wo y drauf zeigt schreiben

           y->next = NULL;                   //Next-Zeiger von Element wo y drauf zeigt=NULL

           Letztes ->next =y;                //Next-Zeiger von Element wo "Letztes" drauf zeigt auf y

           Letztes = y;                      //"Letztes" Zeiger auf Element von y schieben


           //Löschen des ersten Elements von q1

           p = First;                        //Element wo First drauf zeigt mit p markieren,

           First = First->next;              //First auf nächstes Element (Wo Next-Zeiger von mit First markiertem Elemen drauf gezeigt hat) schieben

           p->next = NULL;                   //Next-Zeiger von Element wo p drauf zeigt=NULL;

           free(p);                          //Speicher freigeben 

        }


        //Ausgeben & Löschen des letzten Elements

        p = First;                           //Element wo First drauf zeigt mit p markieren,

        printf("      \xBA %i \xBA\n",p->zahl);     //Ausgeben von Zahl aus Element wo p drauf steht

        First = First->next;                 //First auf nächstes Element (Wo Next-Zeiger von mit First markiertem Elemen drauf gezeigt hat) schieben

        p->next = NULL;                      //Next-Zeiger von Element wo p drauf zeigt=NULL;

        free(p);                             //Speicher freigeben


        N--;                                 //Listenlänge um 1 verringern



       //Umschichten von 2 in 1


        if (Erstes->next!=NULL)

        //Wenn Next Zeiger von Element wo "Erstes" drauf zeigt ungleich NULL ist tue das:

        {

          //Anlegen der ersten queue mit dem ersten Element von q2

          First = (Zeiger) malloc(sizeof(NODE)); First->zahl=Erstes->zahl;//Neuer Speicher Anfordern

          Last=First; Last->next = NULL;                                  //Last Zeiger auf erstes Element, Next-Zeiger aus Element wo Last drauf zeigt=NULL

          //Löschen des ersten Elements von q2

          x = Erstes;                         //Element wo "Erstes" drauf zeigt mit x markieren

          Erstes = Erstes->next;              //"Erstes" auf nächstes Element (Wo Next-Zeiger von mit "Erstes" markiertem Element drauf gezeigt hat) schieben

          x->next = NULL; free(x);            //Next-Zeiger von Element wo x drauf zeigt=NULL; Speicher freigeben


          for (i=1; i<=N-2; i++)

          {        

            //Einlesen der Zahl aus dem ersten Element von q2

            q = (Zeiger)malloc(sizeof(NODE)); //Neuer Speicher Anfordern

            q->zahl=Erstes->zahl;             //Die zahl aus dem Element wo "Erstes" drauf zeigt in das Element wo q drauf zeigt schreiben

            q->next = NULL;                   //Next-Zeiger von Element wo q drauf zeigt=NULL

            Last ->next =q;                   //Next-Zeiger von Element wo Last drauf zeigt auf q

            Last = q;                         //Last Zeiger auf Element von q schieben


            //Löschen des ersten Elements von q2

            x = Erstes;              //Element wo "Erstes" drauf zeigt mit x markieren,

            Erstes = Erstes->next;   //"Erstes" auf nächstes Element (Wo Next-Zeiger von mit "Erstes" markiertem Element drauf gezeigt hat) schieben

            x->next = NULL; free(x); //Next-Zeiger von Element wo x drauf zeigt=NULL; Speicher freigeben

          }


          //Ausgeben & Löschen des letzten Elements

          x = Erstes;                //Element wo "Erstes" drauf zeigt mit x markieren

          printf("      \xBA %i \xBA\n",x->zahl);  //Ausgeben der Zahl aus dem Element wo x drauf zeigt

          Erstes = Erstes->next;     //"Erstes" auf nächstes Element (Wo Next-Zeiger von mit "Erstes" markiertem Element drauf gezeigt hat) schieben

          x->next = NULL; free(x);   //Next-Zeiger von Element wo x drauf zeigt=NULL; Speicher freigeben

          N--;                       //Listenlänge um 1 verringern

        }

     }


  //Ausgeben des letzten Elements:


      if (Erstes!=NULL)         

      //Wenn "Erstes" nicht NULL ist tue das:

      { 

         printf("      \xBA %i \xBA\n",Erstes->zahl);//Ausgeben der Zahl aus dem Element wo "Erstes" drauf zeigt

         //Löschen des letzten Elements

         x = Erstes;                 //Element wo "Erstes" drauf zeigt mit x markieren

         Erstes = Erstes->next;      //"Erstes" auf nächstes Element (Wo Next-Zeiger von mit "Erstes" markiertem Element drauf gezeigt hat) schieben

         x->next = NULL;             //Next-Zeiger von Element wo x drauf zeigt=NULL

         free(x);                    //Speicher freigeben

      }


      if (First!=NULL)

      //Wenn First nicht NULL ist tue das:

      { 

         printf("      \xBA %i \xBA\n",First->zahl);//Ausgeben der Zahl aus dem Element wo "First" drauf zeigt

         //Löschen des letzten Elements

         p = First;                  //Element wo First drauf zeigt mit p markieren

         First = First->next;        //First auf nächstes Element (Wo Next-Zeiger von mit First markiertem Element drauf gezeigt hat) schieben

         p->next = NULL;             //Next-Zeiger von Element wo p drauf zeigt=NULL

         free(p);                    //Speicher freigeben

      } 

      printf("      \xC8\xCD\xCD\xCD\xBC\n\n");

      system("Pause");

      return 0;   

}

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...