Verkettete Liste



  • Hallo!
    Ich hab seid Tagen ein Verständnisproblem und hoffe, Ihr könnt mir helfen (glaube ich bestimmt):
    Wir haben in der Schule die Aufgabe erhalten einen Texteditor (Konsolenanwendung) zu programmieren und dafür eine fertige Datei (.obj) erhalten, die das zuletzt eingelesene Tastaturzeichen liefert. Nun sollen diese Daten in eine verkettete Liste geschrieben werden. Diese Liste soll nach jeder Tastatureingabe ausgegeben werden also praktisch so als ob man einfach ein scanf benutzt hätte.
    Hier die verkettete Liste:

    typedef struct one_line_of_code 
    { 
    struct one_line_of_code *next; // Nachfolger 
    char a_line_of_code[80]; // 80 Zeichen pro Zeile 
    } ONE_LINE_IN_LL; 
    
    ONE_LINE_IN_LL *first_element_in_LL=NULL; 
    
    void linked_list(key_code) //key_code ist die Auswertung der Datei 
    { 
    ONE_LINE_IN_LL *pLL=NULL; 
    pLL=(ONE_LINE_IN_LL*) malloc (sizeof(ONE_LINE_IN_LL)); 
    strcpy(pLL->a_line_of_code,"TEST"); 
    // TEST = hier soll wohl der Text kopiert werden, aber wie ? 
    pLL->next=NULL; 
    first_element_in_LL=pLL; 
    }
    

    Und hier die Ausgabe der gesamten Liste:

    void LL_drucken() 
    { 
    ONE_LINE_IN_LL *ptr=first_element_in_LL; 
    while(ptr!=NULL) 
    { 
    printf("%s",ptr->a_line_of_code); 
    ptr=ptr->next; 
    } 
    }
    

    Mein Problem ist, das ich einfach nicht verstehe wie ich es schaffen soll, das key_code in die verkettete Liste geschrieben und anschließend nach jeder einzelnen Tastatureingabe ausgegeben wird.
    Ich hoffe wirklich ihr könnt mir helfen und bitte keine Buch / URL empfehlungen zu linked-list, das hab ich alles schon durch nur ich kappiers einfach nich.

    Gruß,
    Jan



  • hi,

    also genau weiss ich noch nicht was du nicht verstehst. ich versuch mal das hier zu kommentieren was hier passiert, vielleicht hilft dir das etwas.

    // eine struktur wird hier angelegt, welche aus einem zeiger auf den nachfolger
    // und "einer zeile" auf dem bildschirm entspricht. 
    typedef struct one_line_of_code 
    { 
    struct one_line_of_code *next; // Nachfolger 
    char a_line_of_code[80]; // 80 Zeichen pro Zeile 
    } ONE_LINE_IN_LL; 
    
    // hier wird ein strukturzeiger erzeugt welcher null ist
    ONE_LINE_IN_LL *first_element_in_LL=NULL; 
    
    void linked_list(key_code) //key_code ist die Auswertung der Datei 
    { 
    // erzeugung eines weiteren strukturzeigers
    ONE_LINE_IN_LL *pLL=NULL; 
    // es wird hier eine variable des typs ONE_LINE_IN_LL erzeugt und der zeiger darauf
    // zurueckgegeben, pLL erhaelt ihn
    pLL=(ONE_LINE_IN_LL*) malloc (sizeof(ONE_LINE_IN_LL)); 
    // der text "TEST" wird hier in die "zeile" kopiert
    strcpy(pLL->a_line_of_code,"TEST"); 
    // TEST = hier soll wohl der Text kopiert werden, aber wie ? 
    // ´das folgeelement wird hier gleich null gesetzt
    pLL->next=NULL; 
    // die globale variable erhaelt die speicheradresse von pLL, also das eben erzeugte element 
    first_element_in_LL=pLL; 
    }
    


  • key_code ist vermutlich das eingegebene Zeichen. Dieses musst du nun immer in dein Array a_line_of_code schreiben und zwar an die letzte freie Stelle. Wenn dein Array voll ist (bei 79 Zeichen!; Stringendezeichen nicht vergessen!), dann musst du ein neues Element in deiner verketteten Liste beginnen und den Zeiger next deines aktuellen Elements darauf zeigen lassen. Danach wird das neue Element das aktuelle und beginnst mit dem Füllen von a_line_of_code von vorne.



  • Und genau da liegt mein Problem. Ich versteh einfach nicht wie ich key_code fortlaufend in a_line_of_code schreiben soll. Ich weis klingt total blöd aber ich hab da irgendwie ne totale Denkplokade.



  • Du könntest z. B. einen Zeiger mitlaufen lassen an welcher Stelle du grad bist.

    ...
    //Deklaration
    char *pos, zeichen;
    ...
    //Wenn eine neue Zeile beginnt
    pos = pLL->a_line_of_code;
    ...
    //Eingegebenes Zeichen auf Zeigerposition speichern und Zeiger um eine Stelle weiterrücken
    *pos++ = zeichen;
    ...
    

Anmelden zum Antworten