• Hi, ich habe eine Aufgabe bei der ich nicht so richtig weiter komme :

    In dieser Aufgabe gehen wir von einer aufsteigend sortierten verketteten Liste aus. Diese Liste kann
    Duplikate enthalten, d.h. mehrere Listenelemente können diesselbe Nutzinfo haben. Für die Liste können
    Sie folgende Struktur verwenden:

    Code
    struct SortierteListe {
    int data ;
    SortierteListe * next ;
    };

    (a) Schreiben Sie eine Funktion SortierteListe* neueSortierteListe(int info), die eine aus einem Element bestehende Liste erzeugt. Dabei soll die Variable data des neuen Listenelements mit dem übergebenen Wert initialisiert werden. Die Funktion soll einen Zeiger auf das einzige Listenelement zurückliefern.
    (b) Schreiben Sie eine Funktion SortierteListe* einfuegen(SortierteListe* l,int info), die
    ein neues Element mit Nutzinfo info anlegt und an einer korrekten Stelle in die (sortierte) Liste l einfügt. Ein Zeiger auf die veränderte Liste soll zurückgegeben werden.

    (c) Schreiben Sie eine Funktion void gibAus(SortierteListe* l), die alle in der Liste l eingetragenenWerte jeweils getrennt durch ein Leerzeichen auf dem Bildschirm ausgibt. Falls die Liste leer ist, soll der Text keine Werte ausgegeben werden.

    (d) Schreiben Sie eine Funktion SortierteListe* loeschen(SortierteListe* l,int info), die alle
    in der sortierten Liste vorhandenen Elemente mit Nutzinfo info löscht. Ein Zeiger auf die veränderte Liste soll zurückgegeben werden.

    (e) Schreiben Sie eine Funktion SortierteListe* verbinde(SortierteListe* l1, SortierteListe*
    l2), die zwei sortierte Listen verbindet. Die sich ergebende Liste soll wieder sortiert sein und alle Elemente aus Liste l1 und aus Liste l2 enthalten.

    (f) Schreiben Sie eine Funktion SortierteListe* kopiere(SortierteListe* l), die eine übergebene
    Liste l elementweise kopiert und einen Zeiger auf die kopierte Liste zurückgibt.

    (g) Schreiben Sie eine Funktion SortierteListe* dreheUm(SortierteListe* l), die eine übergebeneListe l elementweise kopiert und dabei die Reihenfolge der Elemente umdreht.


    Also zu (a) hab ich das hier:

    Kann mir jemand sagen ob das richtig für a ist? bzw mir ansätze für die weiteren aufgaben geben? würde mich freuen!! verstehe listen noch nicht wirklich ganz, nur grob

  • Ja, das funktioniert. Also a) ist damit gelöst.
    Aber anstatt jetzt zu jeder Teilaufgabe einen Tipp zu geben, frag doch konkrete Sachen. Also wo hast du genau Probleme?

    PS: wozu der globale "startZeiger" Pointer wenn du ihn nicht nutzt?

  • Zitat von Wasserleiche

    Ja, das funktioniert. Also a) ist damit gelöst.
    Aber anstatt jetzt zu jeder Teilaufgabe einen Tipp zu geben, frag doch konkrete Sachen. Also wo hast du genau Probleme?

    PS: wozu der globale "startZeiger" Pointer wenn du ihn nicht nutzt?

    hi, ja also der kommt weg, hatte den vergessen rauszunehmen, hatte mal nen anderen ansatz zu der teilaufgabe a.

    also zu b und c hab ich folgendes dann kommt auch eine konkrete frage :)

    Also hab jetzt die teilaufgabe b und c noch ergänzt nur weiss nicht wie ich die miteinander kombinieren soll :( also die letzte funktion soll ja die in der liste l eingetragenen elemente ausgeben, nur irgendwie funktioniert das nicht und ich muss ja in der main die funktionen aufrufen, nur ich weiss nicht woher ich die parameter hole mhh

  • Also, Teilaufgabe b) sollte problemlos funktionieren. Bei der Aufgabe c) hast du allerdings einen Fehler, und zwar in der Zeile

    Code
    if(kopie=NULL)
       cout << "keine Werte";
    else
       { ... }

    musst du natürlich zwei "==" nutzen, nicht eines. Jetzt hast du in der If-Anweisung eine Zuweisung. Da sollte außerdem ein guter Compiler eine Warnung rausgeben!

    Ein Beispiel wie du die Funktionen nutzen könntest wäre folgendes:

    Ich bin mir jetzt aber nicht vollkommen sicher ob das deine Frage war...

  • Zitat von Wasserleiche

    Also, Teilaufgabe b) sollte problemlos funktionieren. Bei der Aufgabe c) hast du allerdings einen Fehler, und zwar in der Zeile

    Code
    if(kopie=NULL)
       cout << "keine Werte";
    else
       { ... }

    musst du natürlich zwei "==" nutzen, nicht eines. Jetzt hast du in der If-Anweisung eine Zuweisung. Da sollte außerdem ein guter Compiler eine Warnung rausgeben!

    Ein Beispiel wie du die Funktionen nutzen könntest wäre folgendes:

    Ich bin mir jetzt aber nicht vollkommen sicher ob das deine Frage war...

    Hi danke erst mal, ja also den fehler hab ich korrigiert, komischer weise hat mein compiler nicht gemerkert... also die Funktion

    Code
    SortierteListe *einfuegen(SortierteListe *l, int info)

    erwartet ja zwei Parameter nur ich weiss nicht recht wie ich der Funktion diese überegeben kann. Also ich muss die funktion ja in der main funktion aufrufen.. mein problem ist das ich nicht weiss wie die parameterübergabe in der main funktion machen soll[/quote]

  • hi canfänger würd mich ma interressieren wie du die aufgabe jetzt gelöst hab.
    muss nämlich genau die selber aufgabe lösen :oops:
    und hab kein plan

    wär echt nett wenn du zeigen würdest wie du die zuende gelöst hast

  • canfänger:

    Ich hab doch geschrieben wie es in der main Funktion aufruft, auch wenn ich einen kleinen Fehler gemacht habe :oops: :


    So funktioniert der Aufruf. Getestet habe ich das jetzt zwar nicht, aber ich wüsste nicht was schiefgehen sollte...