Was ist ein Anker bei einer verketteten Liste?



  • Bashar schrieb:

    DerDebugger schrieb:

    Aber warum benutzt man den Anker in dem Programm-Beispiel so oft??

    Weil dort erst Elemente von vorne an die Liste angehängt werden und dann wieder von vorne abgehängt werden. Der Anker ändert sich dabei jedesmal.

    Wo hast du eigentlich dieses furchtbare Beispiel her?

    Aus dem Buch "Einstieg in C++".

    Warum findest du das Beispiel furchtbar?



  • Finger weg von den Galileo C++ Büchern.. die sind für die Tonne...



  • DerDebugger schrieb:

    Warum findest du das Beispiel furchtbar?

    - globale Variablen -> Schrott
    - wenn man denn schon new benutzt, dann gehört ein delete dazu
    - inhomogene Namenskonvention
    - ...



  • - globale Variablen -> Schrott
    - wenn man denn schon new benutzt, dann gehört ein delete dazu
    - inhomogene Namenskonvention
    - ...[/quote]

    Da gehört delete dazu. Hab nur ich weggemacht, damit ich nicht nochmehr durcheinander komm.



  • DerDebugger schrieb:

    Da gehört delete dazu. Hab nur ich weggemacht, damit ich nicht nochmehr durcheinander komm.

    Super Idee. 👍
    😞



  • DerDebugger schrieb:

    Da gehört delete dazu. Hab nur ich weggemacht, damit ich nicht nochmehr durcheinander komm.

    Reifer Entwicklungsprozess 👍

    Warum findest du das Beispiel furchtbar?

    Der Code ist einfach nur Müll...



  • Sone schrieb:

    DerDebugger schrieb:

    Da gehört delete dazu. Hab nur ich weggemacht, damit ich nicht nochmehr durcheinander komm.

    Reifer Entwicklungsprozess 👍

    Warum findest du das Beispiel furchtbar?

    Der Code ist einfach nur Müll...

    Warum ist der Code einfach nur Müll.
    Das Programm macht, was es soll - nämlich so viele Zahlen speichern wie der Nutzer es will.



  • Ist etwas Platformabhängig (und zwar in der Weise, das diese komische cin-get-sync Kombination nicht immer das tut, was du erwartest , was aber auch auf den Compiler ankommt)

    Und die Schleife fände ich so schöner (das ist glaub ich Geschmackssache) :

    int Inhalt = 1;
        while (cin >> Inhalt && Inhalt != 0)
    	{
    		 Listenelement *neuesListenelement = new Listenelement;
                neuesListenelement->zahl = Inhalt;
                neuesListenelement->nachfolger = Anker;
                Anker = neuesListenelement; 
    
    	}
    

    Inhalt ist nicht initialisiert (im Original, ich hab das im Code von mir nachgebessert)

    FAUSTREGEL:
    ⚠ ⚠ ⚠ AUF JEDES NEW EIN DELETE ⚠ ⚠ ⚠

    (Ich weiß jetzt nicht wo das da hingehört, also ist es nicht drinnen)



  • Sone schrieb:

    DerDebugger schrieb:

    Da gehört delete dazu. Hab nur ich weggemacht, damit ich nicht nochmehr durcheinander komm.

    Reifer Entwicklungsprozess 👍

    Warum findest du das Beispiel furchtbar?

    Der Code ist einfach nur Müll...

    Warum ist der Code einfach nur Müll.
    Das Programm macht, was es soll - nämlich so viele Zahlen speichern wie der Nutzer es will.



  • Amüsiert mich immer köstlich, wenn unregistrierte das sagen.

    der code ist einfach nur müll

    Grob gesagt, stimmt auch, aber Jeder fängt man an.

    Finger weg von den Galileo C++ Büchern.. die sind für die Tonne...

    Eins der höchsten Gesetze in C++ 😉

    Wutz schrieb:

    DerDebugger schrieb:

    Warum findest du das Beispiel furchtbar?

    - globale Variablen -> Schrott
    - wenn man denn schon new benutzt, dann gehört ein delete dazu
    - inhomogene Namenskonvention
    - ...

    Es würde ihm mehr bringen, wenn du auch sagst warum.
    von globale Variablen ist abzuraten, da sie überall (halt global) sichtbar sind. Das hat zur Folge, dass sehr schnell diese Variablen geändert werden können. Es gibt nur ganz ganz seltene ausnahmen, wo das Sinn macht.
    new Allociiert Speicher, dieser muss wieder freigegeben werden, das passiert mit delete, deswegen gehört zu jedem new ein delete. (Zu jedem new[] gehört ein delete[]).
    Gewöhn dir an, die Namen durchgängig gleich zu benennen. Das hilft dir selber dich zu orientieren, zum Beispiel was Variablen, was Funktionen, was Klassen, was Typedefs, was Enums etc. sind. Außerdem macht es das für andere einfacher den Code später nachzuvollziehen.



  • (OT) aus gegebenem Anlass würde es mich mal interessieren, ob man Beiträge mleden kann. Muss ich nen Mod per PN anschreiben? Oder gibts da irgendwo nen Button, den ich bis jetzt übersehen habe?



  • daddy_felix schrieb:

    (OT) aus gegebenem Anlass würde es mich mal interessieren, ob man Beiträge mleden kann. Muss ich nen Mod per PN anschreiben? Oder gibts da irgendwo nen Button, den ich bis jetzt übersehen habe?

    Button gibts keinen, PN wäre ne Mail. Alternativ in der Forentechnik posten, was dir missfällt. Oder darauf vertrauen, dass die Mods das schon sehen werden 😉



  • Cyres schrieb:

    Amüsiert mich immer köstlich, wenn unregistrierte das sagen.

    der code ist einfach nur müll

    Grob gesagt, stimmt auch, aber Jeder fängt man an.

    Finger weg von den Galileo C++ Büchern.. die sind für die Tonne...

    Eins der höchsten Gesetze in C++ 😉

    Wutz schrieb:

    DerDebugger schrieb:

    Warum findest du das Beispiel furchtbar?

    - globale Variablen -> Schrott
    - wenn man denn schon new benutzt, dann gehört ein delete dazu
    - inhomogene Namenskonvention
    - ...

    Es würde ihm mehr bringen, wenn du auch sagst warum.
    von globale Variablen ist abzuraten, da sie überall (halt global) sichtbar sind. Das hat zur Folge, dass sehr schnell diese Variablen geändert werden können. Es gibt nur ganz ganz seltene ausnahmen, wo das Sinn macht.
    new Allociiert Speicher, dieser muss wieder freigegeben werden, das passiert mit delete, deswegen gehört zu jedem new ein delete. (Zu jedem new[] gehört ein delete[]).
    Gewöhn dir an, die Namen durchgängig gleich zu benennen. Das hilft dir selber dich zu orientieren, zum Beispiel was Variablen, was Funktionen, was Klassen, was Typedefs, was Enums etc. sind. Außerdem macht es das für andere einfacher den Code später nachzuvollziehen.

    Aber warum ist der Code denn Müll? (abgesehen davon, dass delete fehlt und globale Variablen verwerndet werden.

    Stimmt die "Übersicht" nicht?

    Oder ist der gesamte Aufbau schlecht?

    Wenn ja könnte mir bitte jemand sagen, was ich verbessen könnte?

    Sind die Galileo Bücher wirklich so schlecht?

    Welches würdet ihr mir empfehlen? 🙂

    Achja - was meinst du mit "variablen immer gleich benennen" oder so?



  • DerDebugger schrieb:

    Aber warum ist der Code denn Müll? (abgesehen davon, dass delete fehlt und globale Variablen verwerndet werden.

    Das steht eigentlich da 😉

    DerDebugger schrieb:

    Stimmt die "Übersicht" nicht?
    Oder ist der gesamte Aufbau schlecht?

    Das gehört eigentlich gekapselt in eine Klasse, das kann man später aber immernoch auslagern

    DerDebugger schrieb:

    Sind die Galileo Bücher wirklich so schlecht?

    Ja! - Jedenfalls die C++-Bücher. "Java ist auch eine Insel" ist zum Beispiel super 😉

    DerDebugger schrieb:

    Welches würdet ihr mir empfehlen? 🙂

    Meine Favoriten sind "Der C++ Programmierer" (Deutsch) und der "C++ Primer" (Englisch), von welchem am 10.8. (also übermorgen) übrigens eine neue Ausgabe erscheint. Allerdings sind beide Bücher keine leichte Materie, aber wenn der Wille und die Motivation da ist, ist das kein Problem 😉

    DerDebugger schrieb:

    Achja - was meinst du mit "variablen immer gleich benennen" oder so?

    Du musst dich auf eine Konvention einigen. Mische nicht Variablennamen wie

    einBaum*
    Einbaum
    Ein_Baum
    einbaum
    ein_baum*
    ...
    

    Dazu gehört übrigens auch Einsprachig zu programmieren.
    Die mit *-versehenden Variablen sind die wohl am häufigsten benutzen Versionen.



  • Cyres schrieb:

    der code ist einfach nur müll

    Grob gesagt, stimmt auch, aber Jeder fängt man an.

    Fail!?

    Cyres schrieb:

    ...

    Eins der höchsten Gesetze in C++

    ...

    Es würde ihm mehr bringen, wenn du auch sagst warum.

    Fail!?



  • Sone, ist die Woche nicht langsam mal um, sodass du wieder Sinnvolle Beiträge posten kannst? Du tust hier nichts zur Sache!



  • Sone muss man ignorieren. Der ist sone Pfeiffe, weißt schon, ne?

    Ich halte ess auch nicht für sinnvoll, Anfäöngern direkt eine verkettete Liste vor die Füße zu knallen. Aus irgendeinem Grund ist das immer eine Anfängeraufgabe, aber die meisten Anfängern kommen nur schlecht damit zurecht.

    Die Fragen die du hast sind berechtigt. Auch ich habe ewig gebraucht, bis ich die Liste verstanden habe. Mein Tipp: leg den Code zur Seite und mach erst mal etwas anderes. Versuche dich an kleinen Konsolenprogrammen die etwas sinnvolles tun (Taschenrechner, tic-tac-toe auf der Konsole, usw) und verwende für das Speichern mehrerer Objekte std::vector (gibt auch ganz viel tolle Tutorials für die Benutzung dazu). Wenn du glaubst, dass du etwas besser mit dem Programmieren klar kommst, schau dir die Liste wieder an. Dann wird dir das alles sofort wieder klar werden.

    Leider bringt es nicht viel, Code einfach abzutippen, man muss selber Probleme lösen um Programmieren zu lernen. Also: geh hin und schrieb tic-tac-toe. Und kauf dir ein anderes Buch.



  • Jops, habs schon gemerkt, aber solange bin ich hier ja noch nicht im Forum und jeder hat ja mal ne Chance verdient 😉

    Ich gebe momentan einigen Komilitonen Nachhilfe in Java und hab denen gesagt, die sollen doch mal bitte nen Stack programmieren, allerdings soll jedes Element in einem Node gespeichert werden. Die Aufgabe halte ich für einfacher als eine Verkettete Liste, aber auch da kamen Probleme auf, die ich nicht für möglich gehalten hätte.

    Wenn es mit der verketteten Liste nicht klappt versuch es dochmal mit nem Stack. Danach evtl nen Queue oder die Liste nochmal probieren.



  • Sone schrieb:

    Cyres schrieb:

    der code ist einfach nur müll

    Grob gesagt, stimmt auch, aber Jeder fängt man an.

    Fail!?

    Damit meinte ich übrigens den Fakt, dass der Code dem Buch entspricht. Und nicht des Anfängers Frohmut.



  • 1. Wäre es sinnvoller, es direkt zu schreiben
    2. ist es trotzdem kein guter Codestil 🙄


Anmelden zum Antworten