Ich verstehe (oder denke, dass ich es tue). struct Node nicht das Selbe wie typedef struct Node. Zugegeben, mein Code wird kompiliert und ausgeführt, wie er soll, aber ich erhalte viele Warnungen beim Zuweisen next und prev (Warnung: Zuweisung von inkompatiblem Zeigertyp). Ich vermute, dass dies damit zu tun hat, wie ich sie in der Knotenstruktur definiere. Ich habe die vollständige Quelle hochgeladen hier
Also, wenn das tatsächlich das Problem ist, wie soll ich es definieren? next und prev innerhalb der typedef struct Node?
Ich war besorgt, dass dies ein Repost sein könnte, konnte aber nicht ganz finden, wonach ich suchte. Vielen Dank.
Ihre verknüpfte Liste sieht für mich sehr seltsam aus. Wenn Sie prev und next haben, warum brauchen Sie dann Kopf und Zahl? Finden Sie eine gute verknüpfte Liste in C und lernen Sie daraus. Ich würde die Apache Runtime Library empfehlen. Ich denke, es hat eine verknüpfte Liste.
– frech
21. Oktober 2010 um 13:49 Uhr
mit Zeigern auf Kopf und Ende machen O (1) anstelle von O (n) anhängen und voranstellen. Lassen Sie mich wissen, wenn Sie andere Fehler sehen, da dies hauptsächlich nur eine Übung ist, um meine C-Kenntnisse nach all den Jahren mit Java etwas frisch zu halten.
– Kenny Cason
21. Oktober 2010 um 13:52 Uhr
Die Warnungen kommen, wenn Sie es versuchen my_node->next = my_other_node
Das macht nicht genau das, was Sie gefragt haben, aber es löst das Problem und so wird dies im Allgemeinen gemacht. Ich glaube nicht, dass es einen besseren Weg gibt.
Diese Art der Vorwärtsdeklaration hat eine zweite Verwendung, nämlich das Verbergen von Daten. Wenn die Liste in einer Bibliothek implementiert wurde, könnten Sie genau die haben typedef im öffentlichen Header, zusammen mit Funktionen wie:
Oh wow. Ich glaube, ich habe jede Kombination ausprobiert, außer dieser einen! Danke! Warnungen alle weg! 🙂
– Kenny Cason
21. Oktober 2010 um 13:45 Uhr
Eigentlich hätte es funktioniert, einfach hinzuzufügen Node nach dem ersten struct im OP-Code.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
21. Oktober 2010 um 15:24 Uhr
@R .. Danke Das hat auch bei mir funktioniert. Gibt es eine Präferenz zwischen den beiden genannten Methoden?
– Kenny Cason
21. Oktober 2010 um 15:44 Uhr
Beides ist genauso gut. Persönlich verwende ich normalerweise nur eine separate Forward-Deklaration und typedef (wie in der Antwort von Unwind), wenn ich die Deklaration in einen Header und die Definition in eine Implementierungsdatei einfügen möchte.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
21. Oktober 2010 um 16:01 Uhr
Ein weiterer akzeptabler Weg und mit der geringsten Änderung des OP-Codes ist der folgende:
Ihre verknüpfte Liste sieht für mich sehr seltsam aus. Wenn Sie prev und next haben, warum brauchen Sie dann Kopf und Zahl? Finden Sie eine gute verknüpfte Liste in C und lernen Sie daraus. Ich würde die Apache Runtime Library empfehlen. Ich denke, es hat eine verknüpfte Liste.
– frech
21. Oktober 2010 um 13:49 Uhr
mit Zeigern auf Kopf und Ende machen O (1) anstelle von O (n) anhängen und voranstellen. Lassen Sie mich wissen, wenn Sie andere Fehler sehen, da dies hauptsächlich nur eine Übung ist, um meine C-Kenntnisse nach all den Jahren mit Java etwas frisch zu halten.
– Kenny Cason
21. Oktober 2010 um 13:52 Uhr
Die Warnungen kommen, wenn Sie es versuchen
my_node->next = my_other_node
– Josiah Yoder
12. September 2018 um 19:42 Uhr