Autor Beitrag
Mojito
Hält's aus hier
Beiträge: 8

Win Vista, 7
C#, VB 6
BeitragVerfasst: Mo 05.10.09 19:29 
Hallo erst mal,

ich hoffe, dass hiermit kein Doppelthema erstellt wird, aber die Suche hat mir nichts Brauchbares ausgespuckt. :)

Ich habe bereits eine einfach verkettete Liste bestehend aus Zwei Classen Listenelement und natürlich Main.
In der Main ist ein "Pointer", der auf den Anfang der Liste zeigt. Also muss ich beim Anhängen der Daten immer wieder von Anfang bis zum Ende durchgehen. Nun möchte ich einen "Pointer" auf das Ende der Liste setzten, sodass ich direkt an das Ende anhängen kann. Doch leider klappt das nicht :(
Ich hoffe ihr könnt mir helfen.
Habe Kommentare in den Code geschrieben, die das hoffentlich verständlicher machen.

Schon mal vielen Dank für eure Bemühungen.

Gruß Jürgen

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Cshp0510
{
    //die Klasse für die Listenelemente
    //jetzt auch mit Methoden
    class Listenelement
    {
        string daten;
        Listenelement naechster, ende;

        //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);
      //nur zur Veranschaulichung
      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 einfügen
            for (int element = 2; element < 4; element++)
                listenAnfang.Anhaengen("Element " + element);

            //die Liste ausgeben
            listenAnfang.Ausgeben();
            Console.ReadLine();
        }
    }
}
gfoidl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 157
Erhaltene Danke: 19

Win XP
C#, Fortran 95 - Visual Studio
BeitragVerfasst: Mo 05.10.09 20:14 
Hallo,

dafür gibt es bereits eine Klasse in .net. Siehe Linked List. Wozu also das Rad neu erfinden?

Wenn es dich interessiert wie es umgesetzt ist kannst du mit dem Reflector den Code anschauen.


mfG Günther

_________________
Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 05.10.09 21:11 
Ich nehme einfach mal an, dass es sich um eine Übung handelt ;) .

user profile iconMojito hat folgendes geschrieben Zum zitierten Posting springen:
Nun möchte ich einen "Pointer" auf das Ende der Liste setzten, sodass ich direkt an das Ende anhängen kann. Doch leider klappt das nicht :(
Könntest du ebenfalls in der Main-Methode machen, sauberer und wahrscheinlich sogar einfacher wäre allerdings eine neue Klasse Liste, die ihre erster- und letzter-Referenzen selbst verwaltet und Methoden wie Anhängen und Voranhängen (oder vielleicht doch lieber einfach Prepend :gruebel: ) bereitstellt.
Ansonsten gilt das Motto: Zeig doch mal, wie weit du schon bist / was du schon ausprobiert / überlegt hast :) .

_________________
>λ=
Mojito Threadstarter
Hält's aus hier
Beiträge: 8

Win Vista, 7
C#, VB 6
BeitragVerfasst: Di 20.10.09 00:36 
Abend alle zusammen,
zu erst danke für die schnellen Antworten. Sorry, dass ich solange nichts mehr dazu gesagt habe, war beruflich sehr eingespannt.
Habe das Problem schon gelöst "ich hatte wohl ein brett vor den Augen" Habe eine neue Instanz meiner Klasse erzeug und von der Methode Anhänge als Rückgabewert die Aktuelle Position gespeichert und schon war das Problem erledigt :=)

Ps. Ja das war eine "Hausaufgabe"

mfg Jürgen