<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Einfachverkettete Liste so in Ordnung?]]></title><description><![CDATA[<p>Hallo an die Forumsmitglieder,</p>
<p>ich habe eine einfachverkettete Liste geschrieben. Das Programm funktioniert einwandfrei. Ich würde mich nur gern nochmal erkundigen, ob ich alles richtig gemacht habe bzw. ob man es anders machen sollte. Es geht mir nur um das Prinzip. Ich habe ein einfaches Programm geschrieben, mit einer Klasse, in der nur ein Konstruktor, Destruktor, eine Einfügefunktion und ein Outputstream enthalten sind. In der Klasse existieren 2 Zeiger. Einer zeigt auf das aktuelle Element, das andere auf das Folgende. So zumindest habe ich das Prinzip mit der einfachverketteten Liste verstanden.</p>
<p>Wäre toll, wenn ihr mir ein Feedback geben könntet zu dem Programm:</p>
<p>[code=&quot;cpp&quot;]<br />
#include &lt;iostream&gt;</p>
<p>using namespace std;</p>
<p>class Einfachliste{</p>
<p>private:<br />
string vname;<br />
string nname;</p>
<p>Einfachliste* beginn;<br />
Einfachliste* naechste;</p>
<p>public:<br />
void neuername(const char*, const char*);<br />
Einfachliste();<br />
~Einfachliste();<br />
friend ostream&amp; operator&lt;&lt;(ostream&amp; os, const Einfachliste&amp;);</p>
<p>};</p>
<p>Einfachliste::Einfachliste(){</p>
<p>this-&gt;beginn = NULL;<br />
this-&gt;naechste = NULL;<br />
this-&gt;vname = &quot;Eintrag&quot;;<br />
this-&gt;nname = &quot;Eintrag&quot;;</p>
<p>}</p>
<p>Einfachliste::~Einfachliste(){}</p>
<p>void Einfachliste::neuername(const char* vname, const char* nname){</p>
<p>Einfachliste* eintrag;<br />
eintrag = new Einfachliste;</p>
<p>eintrag-&gt;vname = vname;<br />
eintrag-&gt;nname = nname;</p>
<p>eintrag-&gt;naechste = beginn;<br />
this-&gt;beginn = eintrag;</p>
<p>}</p>
<p>ostream&amp; operator&lt;&lt;(ostream&amp; os, const Einfachliste&amp; person)<br />
{</p>
<p>Einfachliste* out;<br />
out = new Einfachliste;<br />
out = person.beginn;</p>
<p>while(out!=0)<br />
{<br />
os&lt;&lt;&quot;VName: &quot;&lt;&lt;out-&gt;vname&lt;&lt;&quot;, NName: &quot;&lt;&lt;out-&gt;nname&lt;&lt;endl;<br />
out = out-&gt;naechste;<br />
}</p>
<p>return os;</p>
<p>}</p>
<p>int main(){</p>
<p>Einfachliste personenregister;</p>
<p>const char* vnameper = &quot;Albert&quot;;<br />
const char* nnameper = &quot;Schroeder&quot;;</p>
<p>for(int i = 0; i&lt;5; i++){<br />
personenregister.neuername(vnameper, nnameper);<br />
}</p>
<p>cout&lt;&lt;&quot;Die Personenliste&quot;&lt;&lt;endl;<br />
cout&lt;&lt;personenregister&lt;&lt;endl;</p>
<p>return 0;<br />
}</p>
<p>[/cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324801/einfachverkettete-liste-so-in-ordnung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 22:01:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324801.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Apr 2014 12:10:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Einfachverkettete Liste so in Ordnung? on Wed, 02 Apr 2014 12:10:40 GMT]]></title><description><![CDATA[<p>Hallo an die Forumsmitglieder,</p>
<p>ich habe eine einfachverkettete Liste geschrieben. Das Programm funktioniert einwandfrei. Ich würde mich nur gern nochmal erkundigen, ob ich alles richtig gemacht habe bzw. ob man es anders machen sollte. Es geht mir nur um das Prinzip. Ich habe ein einfaches Programm geschrieben, mit einer Klasse, in der nur ein Konstruktor, Destruktor, eine Einfügefunktion und ein Outputstream enthalten sind. In der Klasse existieren 2 Zeiger. Einer zeigt auf das aktuelle Element, das andere auf das Folgende. So zumindest habe ich das Prinzip mit der einfachverketteten Liste verstanden.</p>
<p>Wäre toll, wenn ihr mir ein Feedback geben könntet zu dem Programm:</p>
<p>[code=&quot;cpp&quot;]<br />
#include &lt;iostream&gt;</p>
<p>using namespace std;</p>
<p>class Einfachliste{</p>
<p>private:<br />
string vname;<br />
string nname;</p>
<p>Einfachliste* beginn;<br />
Einfachliste* naechste;</p>
<p>public:<br />
void neuername(const char*, const char*);<br />
Einfachliste();<br />
~Einfachliste();<br />
friend ostream&amp; operator&lt;&lt;(ostream&amp; os, const Einfachliste&amp;);</p>
<p>};</p>
<p>Einfachliste::Einfachliste(){</p>
<p>this-&gt;beginn = NULL;<br />
this-&gt;naechste = NULL;<br />
this-&gt;vname = &quot;Eintrag&quot;;<br />
this-&gt;nname = &quot;Eintrag&quot;;</p>
<p>}</p>
<p>Einfachliste::~Einfachliste(){}</p>
<p>void Einfachliste::neuername(const char* vname, const char* nname){</p>
<p>Einfachliste* eintrag;<br />
eintrag = new Einfachliste;</p>
<p>eintrag-&gt;vname = vname;<br />
eintrag-&gt;nname = nname;</p>
<p>eintrag-&gt;naechste = beginn;<br />
this-&gt;beginn = eintrag;</p>
<p>}</p>
<p>ostream&amp; operator&lt;&lt;(ostream&amp; os, const Einfachliste&amp; person)<br />
{</p>
<p>Einfachliste* out;<br />
out = new Einfachliste;<br />
out = person.beginn;</p>
<p>while(out!=0)<br />
{<br />
os&lt;&lt;&quot;VName: &quot;&lt;&lt;out-&gt;vname&lt;&lt;&quot;, NName: &quot;&lt;&lt;out-&gt;nname&lt;&lt;endl;<br />
out = out-&gt;naechste;<br />
}</p>
<p>return os;</p>
<p>}</p>
<p>int main(){</p>
<p>Einfachliste personenregister;</p>
<p>const char* vnameper = &quot;Albert&quot;;<br />
const char* nnameper = &quot;Schroeder&quot;;</p>
<p>for(int i = 0; i&lt;5; i++){<br />
personenregister.neuername(vnameper, nnameper);<br />
}</p>
<p>cout&lt;&lt;&quot;Die Personenliste&quot;&lt;&lt;endl;<br />
cout&lt;&lt;personenregister&lt;&lt;endl;</p>
<p>return 0;<br />
}</p>
<p>[/cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392332</guid><dc:creator><![CDATA[Sarah98]]></dc:creator><pubDate>Wed, 02 Apr 2014 12:10:40 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachverkettete Liste so in Ordnung? on Wed, 02 Apr 2014 12:12:15 GMT]]></title><description><![CDATA[<p>Sorry, hier der Code</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class Einfachliste{

	private:
	string vname;
	string nname;

	Einfachliste* beginn;
	Einfachliste* naechste;	

	public:
	void neuername(const char*, const char*);
	Einfachliste();
	~Einfachliste();
	friend ostream&amp; operator&lt;&lt;(ostream&amp; os, const Einfachliste&amp;);

};

Einfachliste::Einfachliste(){

	this-&gt;beginn = NULL;
	this-&gt;naechste = NULL;
	this-&gt;vname = &quot;Eintrag&quot;;
	this-&gt;nname = &quot;Eintrag&quot;;

}

Einfachliste::~Einfachliste(){}

void Einfachliste::neuername(const char* vname, const char* nname){

	Einfachliste* eintrag;
	eintrag = new Einfachliste;

	eintrag-&gt;vname = vname;
	eintrag-&gt;nname = nname;

	eintrag-&gt;naechste = beginn;
	this-&gt;beginn = eintrag;

}

ostream&amp; operator&lt;&lt;(ostream&amp; os, const Einfachliste&amp; person)
{

	Einfachliste* out;
	out = new Einfachliste;
	out = person.beginn;

	while(out!=0)
	{
		os&lt;&lt;&quot;VName: &quot;&lt;&lt;out-&gt;vname&lt;&lt;&quot;, NName: &quot;&lt;&lt;out-&gt;nname&lt;&lt;endl;
		out = out-&gt;naechste;
	}

	return os;

}

int main(){

	Einfachliste personenregister;

	const char* vnameper = &quot;Albert&quot;;
	const char* nnameper = &quot;Schroeder&quot;;

	for(int i = 0; i&lt;5; i++){	
		personenregister.neuername(vnameper, nnameper);	
	}

	cout&lt;&lt;&quot;Die Personenliste&quot;&lt;&lt;endl;
	cout&lt;&lt;personenregister&lt;&lt;endl;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2392333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392333</guid><dc:creator><![CDATA[Sarah98]]></dc:creator><pubDate>Wed, 02 Apr 2014 12:12:15 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachverkettete Liste so in Ordnung? on Wed, 02 Apr 2014 12:41:05 GMT]]></title><description><![CDATA[<p>Die Dinge die ich beim kurz drüberlesen gesehen habe:</p>
<p>Zeile 52:</p>
<pre><code>51  Einfachliste* out;
52  out = new Einfachliste;
53  out = person.beginn;
</code></pre>
<p>Und generell hast du vergessen, den ganzen mit <em>new</em> allozierten Speicher wieder frei zu geben.</p>
<p>Sieht ansonnsten OK aus.</p>
<p>Lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392345</guid><dc:creator><![CDATA[Singender Holzkübel]]></dc:creator><pubDate>Wed, 02 Apr 2014 12:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachverkettete Liste so in Ordnung? on Wed, 02 Apr 2014 12:53:35 GMT]]></title><description><![CDATA[<p>Hallo Singender Holzkübel,</p>
<p>danke für deine schnelle Antwort. Das Programm funktioniert auch richtig. Nur habe ich diese Frage gestellt, weil in den Beispielen, die ich mir angesehen habe, stets 2 Klassen angelegt worden sind. Einmal für die Daten und einmal für die Kette. Muss man das denn so machen? Oder ist meine Version schon so in Ordnung? Schließlich sind die Zeiger in der Klasse schon enthalten, die stets auf die Einträge zeigen sollen, also das erste und das dem folgende Element.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392350</guid><dc:creator><![CDATA[Sarah98]]></dc:creator><pubDate>Wed, 02 Apr 2014 12:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachverkettete Liste so in Ordnung? on Wed, 02 Apr 2014 13:39:15 GMT]]></title><description><![CDATA[<p>Memory Leak. Gewaltiges.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392359</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 02 Apr 2014 13:39:15 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachverkettete Liste so in Ordnung? on Wed, 02 Apr 2014 13:43:48 GMT]]></title><description><![CDATA[<p>Hallo Nathan,</p>
<p>wo genau?</p>
<p>Ich habe in dem Destruktor zusätzlich eingebaut:</p>
<pre><code>Einfachliste::~Einfachliste(){

	Einfachliste* neu;
	neu=beginn;

	while(neu!=0){

		if (neu!=0)
		{
			delete neu-&gt;naechste;
		}
		else
			delete beginn;
		neu=neu-&gt;naechste;
	}

}
</code></pre>
<p>Löst dies das Problem? Den output-Operator habe ich schon angepasst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392363</guid><dc:creator><![CDATA[Sarah98]]></dc:creator><pubDate>Wed, 02 Apr 2014 13:43:48 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachverkettete Liste so in Ordnung? on Wed, 02 Apr 2014 13:46:11 GMT]]></title><description><![CDATA[<p>Sarah98 schrieb:</p>
<blockquote>
<p>Hallo Singender Holzkübel,</p>
<p>danke für deine schnelle Antwort. Das Programm funktioniert auch richtig. Nur habe ich diese Frage gestellt, weil in den Beispielen, die ich mir angesehen habe, stets 2 Klassen angelegt worden sind. Einmal für die Daten und einmal für die Kette. Muss man das denn so machen? Oder ist meine Version schon so in Ordnung? Schließlich sind die Zeiger in der Klasse schon enthalten, die stets auf die Einträge zeigen sollen, also das erste und das dem folgende Element.</p>
</blockquote>
<p>Eine Kette-Klasse, die die ganzen Daten-Knoten enthält, ist durchaus sinvoll.<br />
Damit hast du dann z.B. gute Kontrolle über die gesamten Daten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392366</guid><dc:creator><![CDATA[Singender Holzkübel]]></dc:creator><pubDate>Wed, 02 Apr 2014 13:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachverkettete Liste so in Ordnung? on Wed, 02 Apr 2014 15:19:21 GMT]]></title><description><![CDATA[<p>Hallo Singender Holzkübel,</p>
<p>ok, habe ich gemacht. Aber ist denn mein Memory Leak bzw. der mit new allozierten Speicher mit Hilfe des Dekonstruktors behoben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392387</guid><dc:creator><![CDATA[Sarah98]]></dc:creator><pubDate>Wed, 02 Apr 2014 15:19:21 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachverkettete Liste so in Ordnung? on Thu, 03 Apr 2014 14:06:23 GMT]]></title><description><![CDATA[<p>Sarah98 schrieb:</p>
<blockquote>
<p>Hallo Singender Holzkübel,</p>
<p>ok, habe ich gemacht. Aber ist denn mein Memory Leak bzw. der mit new allozierten Speicher mit Hilfe des Dekonstruktors behoben?</p>
</blockquote>
<p>Nein, weil dein Destructor-Code nicht so funktioniert, wie du dir das vorstellst. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Hast du vielleicht aktuelleren Code, mit der Ketten-Klasse? Dann kann ich dir das ganze zeigen.</p>
<p>Lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392578</guid><dc:creator><![CDATA[Singender Holzkübel]]></dc:creator><pubDate>Thu, 03 Apr 2014 14:06:23 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachverkettete Liste so in Ordnung? on Fri, 04 Apr 2014 13:42:31 GMT]]></title><description><![CDATA[<p>Verbesserungsvorschläge:</p>
<p>- Ändere Deine Liste so, ,dass Du zwischen der Liste und einem Eintrag in der Liste unterscheidest<br />
- Nutze Initialisierungslisten <a href="http://de.wikipedia.org/wiki/Initialisierungsliste" rel="nofollow">http://de.wikipedia.org/wiki/Initialisierungsliste</a><br />
- beachte die Regel der DREI <a href="http://de.wikipedia.org/wiki/Dreierregel" rel="nofollow">http://de.wikipedia.org/wiki/Dreierregel</a><br />
- include &lt;string&gt; hinzufügen<br />
- kein using namespace std; im Header</p>
<p>so die Richtung:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;

class Einfachliste {
public:
    struct Eintrag {
        Eintrag( const std::string&amp; vn, const std::string&amp; nn );
        Eintrag* naechste;
        std::string vname;
        std::string nname; 
    };

private:
    Eintrag* beginn;

    // Bem.: macht man Copy-Konstruktor und Assignment-Opeator private, so muss man sie nicht implementieren
    Einfachliste( const Einfachliste&amp; b );  // Regel der DREI beachten
    Einfachliste&amp; operator=( const Einfachliste&amp; b );

public:
    void neuername(const Eintrag&amp; eintrag);
    Einfachliste();
    ~Einfachliste();
    friend std::ostream&amp; operator&lt;&lt;( std::ostream&amp; os, const Einfachliste&amp;); 
};

int main(){
    using namespace std;
    Einfachliste personenregister;

    std::string vnameper = &quot;Albert0&quot;;
    const char* nnameper = &quot;Schroeder&quot;;

    for(int i = 0; i&lt;5; i++, ++vnameper[6] ){  
        personenregister.neuername( Einfachliste::Eintrag( vnameper, nnameper ) );
    }

    cout&lt;&lt;&quot;Die Personenliste&quot;&lt;&lt;endl;
    cout&lt;&lt;personenregister&lt;&lt;endl;

    return 0;
}
</code></pre>
<p>@Edit Zeile 9: <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18927">@DocShoe</a> done</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392752</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 04 Apr 2014 13:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to Einfachverkettete Liste so in Ordnung? on Fri, 04 Apr 2014 12:32:44 GMT]]></title><description><![CDATA[<p>Korrekturvorschlag:<br />
Zeile 9 <code>Einfachliste* naechste</code> durch <code>Eintrag* naechster</code> ersetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392785</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 04 Apr 2014 12:32:44 GMT</pubDate></item></channel></rss>