Template für einfach verkettete Liste



  • Hallo,
    ich bin grad dabei ein Klassentemplate für eine einfach verkettete Liste zu erstellen.
    Leider habe ich noch ein Verständnisproblem beim Vergeben des Next-Zeigers des vorhergehenden Elementes auf das aktuelle(gerade erstellte Element).
    Im Folgenden mein Quellcode: Es geht dabei um die Methode "setze_zeiger()" in der Klasse listen_element.

    Hab ihr einen Tipp für mich?

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    template <typename t>											//Template für die Liste
    class listen_element{
    public:
    	listen_element(t name, int nr);
    	void setze_zeiger();
    	int id;
    	t value;
    	listen_element* next;
    };
    template <typename t>
    listen_element<t>::listen_element(t name, int nr)
    {
    	id=nr;
    	value=name;
    	setze_zeiger();
    }
    template <typename t>
    void listen_element<t>::setze_zeiger()
    {
    	if(id==1)
    	{
    
    		next=NULL;
    	}else{
    		liste.next=liste;									//Zuweisen des next Zeigers des vorhergehenden Elements
    		next=NULL;											//Zeiger des Elementes auf Null setzen
    	}
    }
    
    void main()
    {
    	int i;
    	string name;
    	listen_element<string>* ptr;							//Zeiger zum Durchsuchen des Liste
    	listen_element<string> anker("Koeln", 1);				//Anker erstellen
    	for(i=2;i<4;i++)										//Elemente der Liste erstellen
    	{
    		cout<<"Namen der Stadt eingeben: "<<endl;
    		cin>>name;
    		listen_element<string> liste(name, i);
    	}
    	ptr=&anker;
    	for(i=0;i<6;i++)
    	{
    		cout<<ptr->value<<endl;
    		ptr=ptr->next;
    	}
    
    }
    


  • Worin besteht denn dein Verständnisproblem?



  • Also der Quellcode, so wie er vorliegt funktioniert nicht.

    Ich versteh nicht, woher ich das vorherige Element bekomme.
    Wie kann ich, wenn ich ein neues Element erzeugt den next-Zeiger des vorhergehenden Elementes setzen?



  • aendue schrieb:

    Also der Quellcode, so wie er vorliegt funktioniert nicht.

    Ich versteh nicht, woher ich das vorherige Element bekomme.
    Wie kann ich, wenn ich ein neues Element erzeugt den next-Zeiger des vorhergehenden Elementes setzen?

    Das bekommst du nicht. Eine unabhängig erzeugte Instanz eines Elemnts kann sich keine Vorgänger aus dem Hut zaubern.
    Warum gibt es keine Klasse List, die die Listenelemente anlegt und verwaltet?
    Und auf dem Stack erzeugte Elemente wie in deiner for-Schleife sind sowiso gleich nach dem Anlegen wieder weg. Vielleicht soltest du auch erst mal eine Liste für int schreiben, statt gleich mit Templates zu experimentieren.



  • manni66 schrieb:

    Warum gibt es keine Klasse List, die die Listenelemente anlegt und verwaltet?

    Ich nehme an, die wird es geben, und sie wird sich der Listenelemente bedienen.

    Nur muss einem Listenelement natürlich irgendwie explizit mitgeteilt werden, womit es sich zu verknüpfen hat, automagisch geht da gar nichts.



  • Bashar schrieb:

    manni66 schrieb:

    Warum gibt es keine Klasse List, die die Listenelemente anlegt und verwaltet?

    Ich nehme an, die wird es geben, und sie wird sich der Listenelemente bedienen.

    Du bist ein hoffnungsloser Optimist 😉



  • Stimmt. Es spricht einiges dafür, z.B. dass es nicht so fernliegt, mit einer Klasse für Listenelemente anzufangen. Aber irgendwie auch einiges dagegen.


Anmelden zum Antworten