Einfache verkettetene Liste..



  • Hallo an das Forum!

    ich brauche Hilfe bei diesen Code. Ich möchte die Liste so erweitern, so dass das Listenende beim Anhängen nicht immer wieder neu ermittelt werden muss, sondern neue Elemente direkt am Ende der Liste angehängt werden können.

    Vorallem ich soll neben den Anfang jetzt auch das Ende der Liste in einer eigene Instanz speichern können...

    Hat jemand eine Idee?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace liste
    {
        //die Klasse für die Listenelemente
        //jetzt auch mit Methoden
        class Listenelement
        {
            string daten;
            Listenelement naechster;
    
            //die Methode zum Setzen der Daten
            public void SetDaten(string datenNeu)
            {
                //die Zeichenkette setzen
                daten = datenNeu;
                //das Ende markieren
                naechster = null;
            }
    
            //die Methode zum Anhängen eines neuen Elements
            //sie ruft sich rekursiv auf, bis das Ende erreicht ist
            public void Anhaengen(string datenNeu)
            {
                //wenn das Ende erreicht ist, ein neues Element erzeugen
                if (naechster == null)
                {
                    naechster = new Listenelement();
                    naechster.SetDaten(datenNeu);
                }
                //sonst ruft sich die Methode selbst wieder auf
                else
                    naechster.Anhaengen(datenNeu);
                //zur Veranschaulichung der Rekursion
                Console.WriteLine("Daten {0} wurden eingefügt.", datenNeu);
            }
    
            //die Methode zur Ausgabe der Liste
            //sie ruft sich ebenfalls rekursiv auf, bis das 
            //Ende erreicht ist
            public void Ausgeben()
            {
                Console.WriteLine(daten);
                if (naechster != null)
                    naechster.Ausgeben();
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                //ein neues Listenelement erzeugen
                Listenelement listenAnfang = new Listenelement();
    
                //die Daten im ersten Listenelement setzen
                listenAnfang.SetDaten("Element 1");
    
                //weitere Elemente in einer Schleife anfügen
                for (int element = 2; element < 4; element++)
                    listenAnfang.Anhaengen("Element " + element);
    
                //die Liste ausgeben
                listenAnfang.Ausgeben();
            }
        }
    }
    

    😞 😞 😞



  • Neben der Klasse Listenelement könntest Du auch eine Klasse Liste einführen. Die merkt sich einfach das erste und letzte Element und bietet Methoden wie Anhaengen an, welche wiederum die gleichnamige Methode der Elemente aufruft.

    Statt mittels Rekursion wäre es schöner wenn Anhaengen mit einer Schleife arbeiten würde.

    Übrigens: Englisch-Deutsch-Mischmasch ist nicht so toll. Sowas wie SetDaten tut in den Augen weh 😉 Vielleicht gänzlich auf Englisch umsteigen bei Bezeichnern, das ist eigentlich die gängige Praxis.



  • µ schrieb:

    Neben der Klasse Listenelement könntest Du auch eine Klasse Liste einführen. Die merkt sich einfach das erste und letzte Element und bietet Methoden wie Anhaengen an, welche wiederum die gleichnamige Methode der Elemente aufruft.

    Statt mittels Rekursion wäre es schöner wenn Anhaengen mit einer Schleife arbeiten würde.

    Übrigens: Englisch-Deutsch-Mischmasch ist nicht so toll. Sowas wie SetDaten tut in den Augen weh 😉 Vielleicht gänzlich auf Englisch umsteigen bei Bezeichnern, das ist eigentlich die gängige Praxis.

    Hallo µ! 👍

    Danke für deine Tipp, ich weiß aber nicht wie ich den nach dein Tipp umsetzen soll.

    Ich werde mich in Zukunft an den Deutsch Bezeichnung dranhalten! 🙄



  • anakhha schrieb:

    Ich werde mich in Zukunft an den Deutsch Bezeichnung dranhalten! 🙄

    👎



  • anakhha schrieb:

    Danke für deine Tipp, ich weiß aber nicht wie ich den nach dein Tipp umsetzen soll.

    Hast Du obigen Code geschrieben? Dann weißt Du doch wie man eine Klasse programmiert. Nun erstellst Du noch eine zweite Klasse List , deren Objekte eine eigentliche Verkettete Liste repräsentieren. Diese Klasse soll das Anfangs- und Endelement als Felder speichern und ein paar Methoden anbieten um Operationen auf der Liste auszuführen.

    Wirklich keine Idee wie Du rangehen musst?


Anmelden zum Antworten