12D.1 einfach verkettete Liste programmieren, Teil 1

แชร์
ฝัง
  • เผยแพร่เมื่อ 11 พ.ย. 2024

ความคิดเห็น • 41

  • @sickcloud6083
    @sickcloud6083 3 ปีที่แล้ว +1

    Also mal ehrlich, Ihre Art zu erklären ist einfach genial. Sie geben uns nicht nur ein Schema F sondern erläutern nebenbei ganz locker was passiert wenn man einen bestimmten Fehler macht. Das spart unheimlich viel Zeit für Recherche! Top Video, Die 40 Minuten vergingen wie im Flug. Danke.

  • @Xiyanor
    @Xiyanor 5 ปีที่แล้ว +2

    Super Video, sehr gut erklärt, ich war am Anfang in der Uni als wir das vom Professor erklärt bekommen haben, so verwirrt mit diesen gefühlt 1000 Zeiger in dem Programm, alle vom Benutzerdefinierten Typen Knoten XD

  • @clippotronics522
    @clippotronics522 6 ปีที่แล้ว +9

    man Sie sind der beste :D

  • @madinahabib1044
    @madinahabib1044 3 ปีที่แล้ว +1

    TOP! EINFACH NUR WOW. EINFACHER UND BESSER KANN MAN ES NICHT ERKLÄREN!!

  • @mertechnightcore4098
    @mertechnightcore4098 3 ปีที่แล้ว

    bei fuegehinzu -> wieso kommt bei den parametern genau ein doppelter pointer?

    • @JoernLoviscach
      @JoernLoviscach  3 ปีที่แล้ว

      An welcher Stelle im Video? (Zeitangabe)

  • @derkeiler2573
    @derkeiler2573 3 ปีที่แล้ว

    Frage zu dem Pointer auf Pointer: Warum muss der pointer auf pointer (z.B. **ptrptr) vom selben Datentyp sein, wie der pointer (*ptr) auf den er zeigt?

    • @JoernLoviscach
      @JoernLoviscach  3 ปีที่แล้ว +1

      Äh, nein, muss und darf er nicht. Das * und das ** gehören zum Datentyp; die Schreibweise in C und C++ mit dem * als Präfix ist diesbezüglich unglücklich (ist in C# besser). Zum Beispiel int **ptrptr bedeutet, dass der Typ von ptrptr ist: Zeiger auf Zeiger auf int. Der Datentyp von ptrptr ist also nicht int.

    • @derkeiler2573
      @derkeiler2573 3 ปีที่แล้ว

      @@JoernLoviscach ahhhhh jetzt habe ich es gecheckt. Mein Fehler lag immer in der Interpretation bei der Schreibweise. Vielen Dank Sie haben mir echt weitergeholfen

  • @schwedenretter
    @schwedenretter 5 ปีที่แล้ว +1

    Wie heißt die Entwicklungsumgebung. Ist sie besser als BlueJ?

    • @JoernLoviscach
      @JoernLoviscach  5 ปีที่แล้ว

      Siehe den Titelbalken des Fensters: IAR Embedded Workbench.
      BlueJ ist doch für Java, nicht für C.

    • @schwedenretter
      @schwedenretter 5 ปีที่แล้ว

      Ich Dussel, Danke. Ich sah nur die ersten Minuten und habe gar nicht gemerkt, dass es nicht um Java geht.
      Ich kenne BlueJ aus der Schule, dort lernen wir Java. Diese Umgebung sieht aber viel schicker aus. Können Sie mir für Java eine bessere Umgebung als BlueJ empfehlen?
      Mein Feedback für Ihre Videoreihen (Mathe und Info): Erste Sahne!

    • @JoernLoviscach
      @JoernLoviscach  5 ปีที่แล้ว

      @@schwedenretter Danke fürs Lob! Lustig, dass diese Entwicklungsumgebung schick aussieht, obwohl sie ist geradezu antik ist. "Professionell" wäre für Java das Android Studio (Denn wofür soll man Java programmieren, wenn nicht für Android Apps?!) oder das darunterliegende IntelliJ IDEA oder aber Eclipse. Die sind natürlich alle eklig groß. Richtig schlank wäre etwa Visual Studio Code, dann mit seinen Extensions für Java.

  • @gottagaming1
    @gottagaming1 5 ปีที่แล้ว

    Darf ich fragen wieso das memory allocate nicht gecastet werden muss, weil ich glaube die funktion gibt doch void zurück.

    • @JoernLoviscach
      @JoernLoviscach  5 ปีที่แล้ว +1

      Sie gibt void-Sternchen zurück. In C wird das automatisch gecastet. Mehr:
      stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc

  • @derkeiler2573
    @derkeiler2573 2 ปีที่แล้ว

    Wenn bei der Funktion *fuegeHinzuAmEnde* ein Zeiger auf einen *NULL* Zeiger übergeben wird, reservieren Sie gleich Speicher für eine Node in einem neu angelegten Zeiger *p. Hätten Sie nicht gleich den neu reservierten Speicher direkt wieder in *n speichern können ohne eine neue Zeigervariable *p extra anzulegen? Also *n = malloc(sizeof(node)); ?

    • @JoernLoviscach
      @JoernLoviscach  2 ปีที่แล้ว

      Nicht ganz, weil ich das alte n noch mal für n->next = p; brauche. Es wäre außerdem verwirrend. Und der Compiler kann (hinter den Kulissen) so etwas viel besser optimieren als ich.

  • @mengarain4327
    @mengarain4327 6 ปีที่แล้ว

    Hallo !
    kann man das Problem bei 23:30 auch mit einer Endlosschleife und einer if-Bedingung beheben?
    void add_end(Daten d, Node* n)
    {
    for (; 1 > 0; n= n->next)
    {
    if (n == NULL)
    {
    Node* p = (Node*) malloc(sizeof(Node));
    if (p == NULL)
    return;
    n->next = p;
    p->d = d;
    p->next= NULL;
    return;
    }
    }
    }
    Würde das funktionieren? Und falls nicht, woran würde es scheitern?
    Danke im Vorraus und LG!

    • @JoernLoviscach
      @JoernLoviscach  6 ปีที่แล้ว +1

      Der Nutzer dieser Funktion erfährt nichts von dem reservierten Speicher, sondern hat immer noch einen Nullzeiger.

    • @mengarain4327
      @mengarain4327 6 ปีที่แล้ว

      Alles klar, vielen Dank für die Antwort!

  • @jannikhense7476
    @jannikhense7476 5 ปีที่แล้ว

    Was bedeutet int main(void) . Ich verstehe nie was in die klammer einer funktion muss und was es bedeutet. Kann mir das jemand erklären bitte.

    • @JoernLoviscach
      @JoernLoviscach  5 ปีที่แล้ว

      Siehe mein Video "03.04.1 Funktionen in C, return
      "
      Am besten mit den Informatik-Videos ganz vorne anfangen: www.j3L7h.de/videos.html

  • @tofpropre1243
    @tofpropre1243 3 ปีที่แล้ว

    welche IDE ist das ?

    • @JoernLoviscach
      @JoernLoviscach  3 ปีที่แล้ว

      Siehe den im Video erkennbaren grünen Titelbalken: IAR Embedded Workbench. Wie die von sechs Jahren ausgesehen hat, wohlgemerkt (Video von 2014).

  • @sephyrias883
    @sephyrias883 6 ปีที่แล้ว

    Was ich nicht verstehe ist wieso man immer wieder denselben Namen für den Zeiger benutzen kann (hier 9:00 "next"). Das Programm weis dann doch gar nicht, auf welchen Zeiger man sich bezieht.
    Und zeigt "next" nicht eigentlich immer nur auf das Struct, in welchem es deklariert wurde, anstelle des "nächsten"?

    • @JoernLoviscach
      @JoernLoviscach  6 ปีที่แล้ว

      n zeigt auf ein struct. n->next ist der Wert des Elements next in diesem struct. Also zeigt n->next auf das nächste struct. Auf die Elemente des nächsten struct kann ich also mit n->next->... zugreifen, insbesonder n->next->next und so weiter.

  • @leonard-riccardowecke2773
    @leonard-riccardowecke2773 8 ปีที่แล้ว

    Wie heißt dein zeichenprogramm?

    • @JoernLoviscach
      @JoernLoviscach  8 ปีที่แล้ว

      Zu meiner Technik siehe hier: www.j3L7h.de/videotech.html

  • @maxs.2108
    @maxs.2108 5 ปีที่แล้ว +1

    Kann mal jemand den Code in die Kommentare ballern?

    • @JoernLoviscach
      @JoernLoviscach  5 ปีที่แล้ว

      Einfach hier unter "...Material...zip" gucken:
      j3L7h.de/lectures/1415ws/Informatik_1/ThemenUndTermine.html

    • @maxs.2108
      @maxs.2108 5 ปีที่แล้ว

      @@JoernLoviscach Finde ich nicht unter dem Datum gibt es da auch kein Eintrag bzw den Titel

    • @JoernLoviscach
      @JoernLoviscach  5 ปีที่แล้ว +1

      @@maxs.2108 In der Liste nach dem Namen von diesem Video suchen!

  • @Chrischa1073711123
    @Chrischa1073711123 10 ปีที่แล้ว +1

    Gutes Video, wie immer :-)
    Aber hätte man die Funktion zaehle (bei ca. 13:20) nicht etwas einfacher schreiben können? :
    ...
    int a = 0;
    for (; n != NULL; n = n->next)
    a++;
    return a;

    • @JoernLoviscach
      @JoernLoviscach  10 ปีที่แล้ว +1

      Coole Idee.

    • @RkoLeague
      @RkoLeague 10 ปีที่แล้ว

      tatsächlich

    • @Alex.U.H.
      @Alex.U.H. 7 ปีที่แล้ว

      Benutzt man für sowas nicht eine while Schleife?
      also:
      while ( n->next != Null)
      {
      n = n->next;
      a++;
      }
      Oder hat das irgend welche didaktische Gründe?

    • @JoernLoviscach
      @JoernLoviscach  7 ปีที่แล้ว

      Worin bestünde der Vorteil des while?

    • @Alex.U.H.
      @Alex.U.H. 7 ปีที่แล้ว

      Ich hatte es nur so in der Literatur gefunden und ich finde es persönlich schöner zu lesen. Aber denke das ist dann auch Geschmackssache. Wie sie im Video auch gesagt hatten das es ein wenig Überwindung kostet die For-Schleife so zu schreiben.

  • @dennisfolz352
    @dennisfolz352 7 ปีที่แล้ว

    Wieso musste man Node* p = malloc(sizeof(Node)); nicht casten??
    malloc() liefert ja void* und nicht Node* zurück.

    • @JoernLoviscach
      @JoernLoviscach  7 ปีที่แล้ว +1

      Der C-Standard schreibt vor, dass der Compiler void* automatisch castet. (Und in C++, wo das nicht geht, hat man new statt malloc.)

    • @dennisfolz352
      @dennisfolz352 7 ปีที่แล้ว

      wow, danke für die schnelle Antwort :D