verkettete Liste



  • Hallo
    Bevor ich noch tagelang verzweifle hoffe ich ihr könnt mir helfen.
    Also ich habe eine Struktur:
    struct Turm{ int Position;
    int Scheiben;
    struct handy *next´;
    struct handy *previous;
    } struct Turm turm[3];
    Meine frage lautet, ob es möglich ist eine doppelt verkettete Liste von 3 Strukturvariablen mittels Array zu erstellen.
    Ich hoffe ihr könnt mir helfen



  • Ja.
    Wozu brauchst du noch eine verk.Liste, wenn du ein Array hast?



  • Na ich möchte die Spielstände speichern (Scheiben pro Turm und Position derer auf einen Turm). Meine Aufgabe ist Spielzüge rückgängig zu machen. Also dachte ich ich speicher alle 3 Türme(also Arrays) als 1 Listenelement. Jedoch wie das möglich ist konnte ich noch nicht herausfinden.



  • Beschreibe mal den genauen Ablauf (OHNE Code und Ideen wie es kodiert werden könnte)


  • Mod

    Das scheint mir doch etwas wirr, was deine Datenstrukturen angeht. 3 Listen mit je einem Speicherplatz pro Element sind etwas anderes als eine Liste mit je 3 Speicherplätzen pro Element. Deine Beschreibung klingt, als wolltest du eher Letzteres. Also

    struct state
    {
      int towers[3][max_discs_per_Tower];
    };
    

    Und von dieser Struktur kannst du dann beliebig viele in einer anderen Datenstruktur speichern, sei es ein Array oder eine verkettete Liste. Wobei sich mir der Sinn der verketteten Liste verschließt. Ein System zum Rückgängigmachen ist (in einfachster Ausführung) ein Stack. Einen Stack kann man zwar mittels einer verketteten Liste implementieren, aber man nutzt dabei keinerlei (der ohnehin kaum vorhandenen) Vorteile einer Liste. Ein dynamisches Array wäre dafür sowohl wesentlich schneller, als auch wesentlich einfacher zu handhaben.



  • Ok. Ich habe das Spiel Türme von hanoi programmiert und bin schon fertig. Das speichern und laden klappt. Nur einen zug zurückmachen nicht. Ich habe die einzelenen Türme als Arrays und die Belegung der Türme als struct realisiert. Ich soll beliebig viele Spielzüge zurück können. Also dachte ich einfach nach jedem Spielzug die einzelnen Türme alle zusammen in eine Liste speichern und dann jeweils bestimmte Knoten löschen. Allerdings habe ich keine Ahnung wie ich die 3 Türme, deren Eigenschaften durch die Struktur gegeben ist, in eine Struktur für die verkettete Liste bekomme



  • das "spielen" der Türme von Hanoi basiert doch nur auf "oberste Scheiben von Quell-Turm auf Ziel-Turm"

    d.h. es gibt einen Startzustand (alles auf A - sortiert nach Durchmesser)

    (A=0, B=1, C=2)

    und deine "Historie" aus Zügen
    [Von Quelle-Turm auf Ziel-Turm]
    Von A auf B
    Von C auf A
    Von A auf B
    Von A auf C
    ... usw.

    dein Ist-Zustand sind die 3 Türme und die enthaltenen Scheiben
    z.B. als int(Durchmesser/0=oberes Ende)[MaxScheiben] + anzahl_scheiben

    von dort aus kannst du weitermachen oder in der Historie zurück


Anmelden zum Antworten