Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Ich würde Dir raten, bevor das hier endlos wird, tritt mal Deinen ganzen Code in die Tonne. Es hat keinen Sinn, wenn Du anfängst immer wieder rum zu bauen ohne Sinn und Verstand.

Dann fang' auf einem Blatt Papier an:

Wie sieht ein Listenelement aus.

Wie sieht dann eine Liste aus (einen Hinweis hatte ich schon gegeben).

Wie sieht der Algorithmus für Einfügen und Löschen aus.

Wenn Du das hast, dann programmierst Du das, d.h. Du definierst, das Listenelement, dann die Liste. Das solltest Du für den Anfang in einzelne Dateien packen (Header)

Wenn Du das hast, dann fängst Du an ein Testprogramm zu schreiben, d.h. nur dort werden Datensätze erzeugt und auch wieder frei gegeben. Die Liste arbeitet nur (!) mit Zeigern und damit auf Referenzen auf den Daten.

Geschrieben

@flashpixx

Das hatte ich auch schon zu einem früheren Zeitpunkt überlegt. Aber im Moment ist es so, dass das ganze ding funktioniert, nur, dass er das erste Listenelemnt nicht mitsortiert. Und deswegen alles funktionierende in die Tone zu treten widerstrebt mir etwas.

Mein sortiert einfügen ist jetzt so:


void sortiert_einfuegen(struct stringList **liste, struct stringList *Neu) {

    struct stringList *Tail;

    struct stringList *Tail2=NULL;

    if (*liste == NULL)

        {*liste = Neu;

        printf("01\n");

        }

    else {

        Tail=*liste;

        printf("02\n");

        while ((strlen((Tail)->zeichen))<(strlen(Neu->zeichen))) 

          {printf("06\n");

          if(Tail->next==NULL)

            break;

          Tail2=Tail;

          Tail = Tail->next;}

        printf("07\n");

        if(Tail2==NULL)

        {

            Neu->next=Tail;

            *liste=Neu;

        }

        else

        {

            Neu->next = Tail;

            Tail2->next=Neu;        

        }

  }

}

das muss doch irgendwie funktionieren...nur sortiert er nciht richtig. Aber wenigstens stürzt er nciht ab...

Geschrieben

Du brichst deine Schleife zu früh ab. Tail soll ja auf das Listenelement zeigen, vor dem du einfügen willst. Da du aber schon rausspringst, wenn Tail->next NULL ist, kannst du nie hinter dem letzten Element einfügen. Brich erst ab, wenn Tail selbst NULL ist. Dann zeigt Tail2 auf das letzte Element, und es sollte funktionieren.

Man könnte sich jetzt noch über die Variablennamen streiten. Tail und Tail2 sind nicht gerade treffend ;)

Geschrieben

Habe jetzt in dem if, wo das break drin ist aus Tail->next ein Tail gemacht, jetzt stürzt es ab, wenn ein Eintrag länger ist als alle anderen. Kürzer geht, nur länger nicht...

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...