<?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[Doppelt verkettete Liste: Suchalgorithmus]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe eine Frage bezüglich einer Search()-Methode in einer D.-V.-Liste.<br />
Um es nachvollziehen zu können, ein kurzer Aufbau:</p>
<ul>
<li>class FirstNode: Anfangsknoten, next-Zeiger</li>
<li>class DefNode: Standartknoten in der Mitte, pre und next-Zeiger</li>
<li>class EndNode: Abschlussknoten, bei LIFO der Alloziierer neuer DefNodes, pre-Zeiger</li>
</ul>
<p>Die Klassen erben alle von der abstrakten Klasse <em>Node</em>. Wie oder wo kann ich nun eine Methode zum suchen einfügen? Ich will hierbei direkt auf Attribute wie -&gt;next oder -&gt;data (Der eigentliche Inhalt der Liste) zugreifen, wie man es in C und structs ja tun kann. Auf sowas wie friend-Klassen will ich verzichten, public-Attribute kommen natürlich auch nicht in Frage.<br />
Ist es ein &quot;guter&quot; Weg, den Suchalgorihtmus in dem eigentlich abstrakten Node zu definieren? Dabei ist Search() eben nicht virtual (ist ja nicht notwendig), aber alle erben von diesem Node und somit kann ich dank Polymorphie mit einem Zeiger Node auf First/Def/EndNode eingehen, die durch die Vererbung alle Search() erhalten und auf Attribute zugreifen, da ich ja sozusagen durch NICHT virtual die Basisklassenfunktion aufrufe, richtig?:</p>
<pre><code class="language-cpp">Node *knoten = new FirstKnoten;
knoten-&gt;Append(); // Rein virtuelle Funktion, führt FirstKnoten-&gt;Append() aus
knoten-&gt;Search(); // ruft nicht virtuelle Node-&gt;Search() auf
</code></pre>
<p>Das wirkt aber unschön und ich habe gehört, Definitionen zu vererben ist <strong>böse</strong>, was habe ich für Alternativen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242422/doppelt-verkettete-liste-suchalgorithmus</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 01:04:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242422.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Jun 2009 15:38:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Doppelt verkettete Liste: Suchalgorithmus on Wed, 03 Jun 2009 15:39:00 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe eine Frage bezüglich einer Search()-Methode in einer D.-V.-Liste.<br />
Um es nachvollziehen zu können, ein kurzer Aufbau:</p>
<ul>
<li>class FirstNode: Anfangsknoten, next-Zeiger</li>
<li>class DefNode: Standartknoten in der Mitte, pre und next-Zeiger</li>
<li>class EndNode: Abschlussknoten, bei LIFO der Alloziierer neuer DefNodes, pre-Zeiger</li>
</ul>
<p>Die Klassen erben alle von der abstrakten Klasse <em>Node</em>. Wie oder wo kann ich nun eine Methode zum suchen einfügen? Ich will hierbei direkt auf Attribute wie -&gt;next oder -&gt;data (Der eigentliche Inhalt der Liste) zugreifen, wie man es in C und structs ja tun kann. Auf sowas wie friend-Klassen will ich verzichten, public-Attribute kommen natürlich auch nicht in Frage.<br />
Ist es ein &quot;guter&quot; Weg, den Suchalgorihtmus in dem eigentlich abstrakten Node zu definieren? Dabei ist Search() eben nicht virtual (ist ja nicht notwendig), aber alle erben von diesem Node und somit kann ich dank Polymorphie mit einem Zeiger Node auf First/Def/EndNode eingehen, die durch die Vererbung alle Search() erhalten und auf Attribute zugreifen, da ich ja sozusagen durch NICHT virtual die Basisklassenfunktion aufrufe, richtig?:</p>
<pre><code class="language-cpp">Node *knoten = new FirstKnoten;
knoten-&gt;Append(); // Rein virtuelle Funktion, führt FirstKnoten-&gt;Append() aus
knoten-&gt;Search(); // ruft nicht virtuelle Node-&gt;Search() auf
</code></pre>
<p>Das wirkt aber unschön und ich habe gehört, Definitionen zu vererben ist <strong>böse</strong>, was habe ich für Alternativen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1720513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1720513</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Wed, 03 Jun 2009 15:39:00 GMT</pubDate></item><item><title><![CDATA[Reply to Doppelt verkettete Liste: Suchalgorithmus on Wed, 03 Jun 2009 15:45:41 GMT]]></title><description><![CDATA[<p>Iteratoren und/oder Ranges. Durch die Implementation von Iteratoren kannst du die Algorithmen aus der Standardbibliothek verwenden:<br />
<a href="http://www.cplusplus.com/reference/algorithm/" rel="nofollow">http://www.cplusplus.com/reference/algorithm/</a></p>
<p>Hier bekommst du einen Überblick über die Funktionsweise der Iteratoren aus der Standardbibliothek in Verbindung mit den Algorithmen:<br />
<a href="http://magazin.c-plusplus.net/artikel/Aufbau%20der%20STL%20-%20Teil%202%3A%20Iteratoren%20und%20Algorithmen" rel="nofollow">http://magazin.c-plusplus.net/artikel/Aufbau%20der%20STL%20-%20Teil%202%3A%20Iteratoren%20und%20Algorithmen</a></p>
<p>Zu Ranges, sobald du die Iteratoren verstanden hast, gibt es in diesem Thread ein Link zu einem PDF:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-240605.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-240605.html</a></p>
<p>Sonst kenne ich leider keinen guten Artikel zu Ranges. Vielleicht hat ja jemand anderes etwas.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1720523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1720523</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 03 Jun 2009 15:45:41 GMT</pubDate></item><item><title><![CDATA[Reply to Doppelt verkettete Liste: Suchalgorithmus on Wed, 03 Jun 2009 17:46:24 GMT]]></title><description><![CDATA[<p>Denke es sollte funktioneren wenn du beim FirstNode die Methode search() einfügst, die dann über den next-Zeiger. die Funtkion search in deinen DefNode's aufruft.</p>
<p>In deiner virtuellen Klasse die methode search() definieren.</p>
<p>Dann im FirstNode</p>
<pre><code class="language-cpp">Node *FirstNode::search(Daten T){
   return next-&gt;search(T);
};
</code></pre>
<p>Dann in deinen DefNode die search Methode definiertst:</p>
<pre><code class="language-cpp">Node *DefNode::search(Daten T){
   if( T == this-&gt;Daten){
       return this;
   }
   else{
       return next-&gt;search(T);  //#Edit, da gehört noch ein return davor ^^
   };
};
</code></pre>
<p>Und im EndNode:</p>
<pre><code class="language-cpp">Node *EndNode::search(Daten T){
   return this;
};
</code></pre>
<p>Musst dann nur noch überprüfen ob das Ergebnis != EndNode ist.</p>
<p>So in etwa sollte Funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1720529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1720529</guid><dc:creator><![CDATA[Neo Gandar]]></dc:creator><pubDate>Wed, 03 Jun 2009 17:46:24 GMT</pubDate></item><item><title><![CDATA[Reply to Doppelt verkettete Liste: Suchalgorithmus on Wed, 03 Jun 2009 17:39:40 GMT]]></title><description><![CDATA[<p>wenn du dann aus den &quot;Node&quot; noch ein &quot;Node *&quot; (typ von this) machst dann schon <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1720603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1720603</guid><dc:creator><![CDATA[korrektur]]></dc:creator><pubDate>Wed, 03 Jun 2009 17:39:40 GMT</pubDate></item></channel></rss>