<?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 Listen]]></title><description><![CDATA[<p>Hallo Leute, ich habe nach einem tutorial eine einfach verkettete liste geschrieben:<br />
list.h</p>
<pre><code class="language-cpp">class LinkedList
{
  public:
   LinkedList();
   void push(int xPos, int yPos);
   void push(Raumschiff* r);
   void pop();
   void first();
   Raumschiff* first(int i);
   void show();
  private:
   Raumschiff   *pStart;
};
</code></pre>
<p>list.cpp</p>
<pre><code class="language-cpp">LinkedList::LinkedList()
{
 pStart = NULL;
}

void LinkedList::push(int xPos, int yPos)
{
 Raumschiff* pNew = new Raumschiff(GRUEN);
 pNew-&gt;setCoordinates(xPos,yPos);
 pNew-&gt;pNext = pStart;
 pStart = pNew;
}

void LinkedList::push(Raumschiff* r)
{
 Raumschiff* pNew = r;
 pNew-&gt;pNext = pStart;
 pStart = pNew;
}

void LinkedList::pop()
{
 if(pStart!=NULL)
    {
     Raumschiff* pOld = pStart;
     pStart = pStart-&gt;pNext;
     delete pOld;
     pOld = NULL;
    }
}

void LinkedList::first()
{
 if(pStart!=NULL)
  pStart-&gt;zeige_werte();
}

Raumschiff* LinkedList::first(int i)
{
 if(pStart!=NULL)
  return pStart;
}

void LinkedList::show()
{
 int counter = 1;
 Raumschiff* pTemp = pStart;
 while(pTemp!=NULL)
    {
     std::cout&lt;&lt;&quot;Nummer: &quot;&lt;&lt;counter&lt;&lt;std::endl;
     pTemp-&gt;zeige_werte();
     pTemp = pTemp-&gt;pNext;
     ++counter;
    }
}
</code></pre>
<p>raumschiff.h</p>
<pre><code class="language-cpp">#ifndef Unit2H
#define Unit2H

#define LINKS 1
#define RECHTS 2
#define ROT 10
#define BLAU 11
#define GRUEN 12
class Raumschiff
{
 public:
    Raumschiff();
    Raumschiff(int Farbe);
    void starten();
    void landen();
    virtual void zeige_werte();
    void setCoordinates(int newX, int newY);
    void SetAttributes(int energy, int direction);
    void SetColor(int Color);
 public:
    Raumschiff  *pNext;
    Raumschiff  *pPrev;
 private:
    int m_energie,
        m_richtung;
    int m_xCoord,
        m_yCoord;
    int m_Color;
};

class Fregatte:public Raumschiff
{
 public:
  Fregatte();
  Fregatte(int Farbe);
  void schiessen();
  void zeige_werte();
 private:
  int   m_raketen;
};
</code></pre>
<p>raumschiff.cpp</p>
<pre><code class="language-cpp">Raumschiff::Raumschiff()
{
 m_Color = ROT;
 m_energie = 100;
 std::cout&lt;&lt;&quot;Raumschiff erstellt: &quot;;
}

Raumschiff::Raumschiff(int Farbe)
{
 m_Color = Farbe;
 m_energie = 100;
 std::cout&lt;&lt;&quot;Raumschiff erstellt mit Farbe&quot;;
  if(Farbe == ROT)
   std::cout&lt;&lt;&quot; Rot: &quot;;
  if(Farbe== BLAU)
   std::cout&lt;&lt;&quot; Blau: &quot;;
  if(Farbe == GRUEN)
   std::cout&lt;&lt;&quot; Gruen: &quot;;
}

void Raumschiff::starten()
{
 std::cout&lt;&lt;&quot;Raumschiff startet&quot;&lt;&lt;std::endl;
}

void Raumschiff::landen()
{
 std::cout&lt;&lt;&quot;Raumschiff landet&quot;&lt;&lt;std::endl;
}

void Raumschiff::zeige_werte()
{
 std::cout&lt;&lt;&quot;Energie: &quot;&lt;&lt;m_energie&lt;&lt;std::endl;
 std::cout&lt;&lt;&quot;Richtung: &quot;;

 if(m_richtung == LINKS)
  std::cout&lt;&lt;&quot;links&quot;&lt;&lt;std::endl;
 if(m_richtung == RECHTS)
  std::cout&lt;&lt;&quot;rechts&quot;&lt;&lt;std::endl;

 std::cout&lt;&lt;&quot;Farbe: &quot;;

 if(m_Color == ROT)
  std::cout&lt;&lt;&quot;Rot&quot;&lt;&lt;std::endl;
 if(m_Color == BLAU)
  std::cout&lt;&lt;&quot;Blau&quot;&lt;&lt;std::endl;
 if(m_Color == GRUEN)
  std::cout&lt;&lt;&quot;Gruen&quot;&lt;&lt;std::endl;
}

void Raumschiff::setCoordinates(int newX, int newY)
{
 if(newX &gt;= 0 &amp;&amp; newX &lt; 800 &amp;&amp; newY &gt;= 0 &amp;&amp; newY &lt; 600)
    {
     m_xCoord = newX;
     m_yCoord = newY;
     std::cout&lt;&lt;&quot;Neue Position uebernommen&quot;&lt;&lt;std::endl;
    }
 else
    {
     std::cout&lt;&lt;&quot;Fehler: Koordinaten liegen ausserhalb des Bildschirms!&quot;&lt;&lt;std::endl;
    }
}
void Raumschiff::SetAttributes(int energy, int direction)
{
 m_energie = energy;
 m_richtung = direction;
}

void Raumschiff::SetColor(int Color)
{
 m_Color = Color;
}

Fregatte::Fregatte()
{
 m_raketen = 10;
 std::cout&lt;&lt;&quot;Fregatte erstellt&quot;&lt;&lt;std::endl;
}

Fregatte::Fregatte(int Farbe):Raumschiff(Farbe)
{
 m_raketen = 10;
 std::cout&lt;&lt;&quot;Fregatte mit Farbe erstellt&quot;&lt;&lt;std::endl;
}

void Fregatte::schiessen()
{
 if(m_raketen&gt;0)
  --m_raketen;
 else
  std::cout&lt;&lt;&quot;Keine Munition mehr&quot;&lt;&lt;std::endl;
}

void Fregatte::zeige_werte()
{
 Raumschiff::zeige_werte();
 std::cout&lt;&lt;&quot;Raketen: &quot;&lt;&lt;m_raketen&lt;&lt;std::endl;
}
</code></pre>
<p>nun meine fragen:</p>
<p>wie baue ich dies zu einer doppelt verketteten list um?<br />
welche methoden sollte eine list bieten?<br />
wie kann ich meine push funktion so ausbauen, das sie &quot;sicher&quot; ein Raumschiff* entgegennimmt? (ist das push einer list eigentl dafür gedacht, ein objekt als parameter zu bekommen, welches in die liste eingetragen wird?)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171417/doppelt-verkettete-listen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 12:37:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171417.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Jan 2007 10:09:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to doppelt verkettete Listen on Thu, 25 Jan 2007 10:09:28 GMT]]></title><description><![CDATA[<p>Hallo Leute, ich habe nach einem tutorial eine einfach verkettete liste geschrieben:<br />
list.h</p>
<pre><code class="language-cpp">class LinkedList
{
  public:
   LinkedList();
   void push(int xPos, int yPos);
   void push(Raumschiff* r);
   void pop();
   void first();
   Raumschiff* first(int i);
   void show();
  private:
   Raumschiff   *pStart;
};
</code></pre>
<p>list.cpp</p>
<pre><code class="language-cpp">LinkedList::LinkedList()
{
 pStart = NULL;
}

void LinkedList::push(int xPos, int yPos)
{
 Raumschiff* pNew = new Raumschiff(GRUEN);
 pNew-&gt;setCoordinates(xPos,yPos);
 pNew-&gt;pNext = pStart;
 pStart = pNew;
}

void LinkedList::push(Raumschiff* r)
{
 Raumschiff* pNew = r;
 pNew-&gt;pNext = pStart;
 pStart = pNew;
}

void LinkedList::pop()
{
 if(pStart!=NULL)
    {
     Raumschiff* pOld = pStart;
     pStart = pStart-&gt;pNext;
     delete pOld;
     pOld = NULL;
    }
}

void LinkedList::first()
{
 if(pStart!=NULL)
  pStart-&gt;zeige_werte();
}

Raumschiff* LinkedList::first(int i)
{
 if(pStart!=NULL)
  return pStart;
}

void LinkedList::show()
{
 int counter = 1;
 Raumschiff* pTemp = pStart;
 while(pTemp!=NULL)
    {
     std::cout&lt;&lt;&quot;Nummer: &quot;&lt;&lt;counter&lt;&lt;std::endl;
     pTemp-&gt;zeige_werte();
     pTemp = pTemp-&gt;pNext;
     ++counter;
    }
}
</code></pre>
<p>raumschiff.h</p>
<pre><code class="language-cpp">#ifndef Unit2H
#define Unit2H

#define LINKS 1
#define RECHTS 2
#define ROT 10
#define BLAU 11
#define GRUEN 12
class Raumschiff
{
 public:
    Raumschiff();
    Raumschiff(int Farbe);
    void starten();
    void landen();
    virtual void zeige_werte();
    void setCoordinates(int newX, int newY);
    void SetAttributes(int energy, int direction);
    void SetColor(int Color);
 public:
    Raumschiff  *pNext;
    Raumschiff  *pPrev;
 private:
    int m_energie,
        m_richtung;
    int m_xCoord,
        m_yCoord;
    int m_Color;
};

class Fregatte:public Raumschiff
{
 public:
  Fregatte();
  Fregatte(int Farbe);
  void schiessen();
  void zeige_werte();
 private:
  int   m_raketen;
};
</code></pre>
<p>raumschiff.cpp</p>
<pre><code class="language-cpp">Raumschiff::Raumschiff()
{
 m_Color = ROT;
 m_energie = 100;
 std::cout&lt;&lt;&quot;Raumschiff erstellt: &quot;;
}

Raumschiff::Raumschiff(int Farbe)
{
 m_Color = Farbe;
 m_energie = 100;
 std::cout&lt;&lt;&quot;Raumschiff erstellt mit Farbe&quot;;
  if(Farbe == ROT)
   std::cout&lt;&lt;&quot; Rot: &quot;;
  if(Farbe== BLAU)
   std::cout&lt;&lt;&quot; Blau: &quot;;
  if(Farbe == GRUEN)
   std::cout&lt;&lt;&quot; Gruen: &quot;;
}

void Raumschiff::starten()
{
 std::cout&lt;&lt;&quot;Raumschiff startet&quot;&lt;&lt;std::endl;
}

void Raumschiff::landen()
{
 std::cout&lt;&lt;&quot;Raumschiff landet&quot;&lt;&lt;std::endl;
}

void Raumschiff::zeige_werte()
{
 std::cout&lt;&lt;&quot;Energie: &quot;&lt;&lt;m_energie&lt;&lt;std::endl;
 std::cout&lt;&lt;&quot;Richtung: &quot;;

 if(m_richtung == LINKS)
  std::cout&lt;&lt;&quot;links&quot;&lt;&lt;std::endl;
 if(m_richtung == RECHTS)
  std::cout&lt;&lt;&quot;rechts&quot;&lt;&lt;std::endl;

 std::cout&lt;&lt;&quot;Farbe: &quot;;

 if(m_Color == ROT)
  std::cout&lt;&lt;&quot;Rot&quot;&lt;&lt;std::endl;
 if(m_Color == BLAU)
  std::cout&lt;&lt;&quot;Blau&quot;&lt;&lt;std::endl;
 if(m_Color == GRUEN)
  std::cout&lt;&lt;&quot;Gruen&quot;&lt;&lt;std::endl;
}

void Raumschiff::setCoordinates(int newX, int newY)
{
 if(newX &gt;= 0 &amp;&amp; newX &lt; 800 &amp;&amp; newY &gt;= 0 &amp;&amp; newY &lt; 600)
    {
     m_xCoord = newX;
     m_yCoord = newY;
     std::cout&lt;&lt;&quot;Neue Position uebernommen&quot;&lt;&lt;std::endl;
    }
 else
    {
     std::cout&lt;&lt;&quot;Fehler: Koordinaten liegen ausserhalb des Bildschirms!&quot;&lt;&lt;std::endl;
    }
}
void Raumschiff::SetAttributes(int energy, int direction)
{
 m_energie = energy;
 m_richtung = direction;
}

void Raumschiff::SetColor(int Color)
{
 m_Color = Color;
}

Fregatte::Fregatte()
{
 m_raketen = 10;
 std::cout&lt;&lt;&quot;Fregatte erstellt&quot;&lt;&lt;std::endl;
}

Fregatte::Fregatte(int Farbe):Raumschiff(Farbe)
{
 m_raketen = 10;
 std::cout&lt;&lt;&quot;Fregatte mit Farbe erstellt&quot;&lt;&lt;std::endl;
}

void Fregatte::schiessen()
{
 if(m_raketen&gt;0)
  --m_raketen;
 else
  std::cout&lt;&lt;&quot;Keine Munition mehr&quot;&lt;&lt;std::endl;
}

void Fregatte::zeige_werte()
{
 Raumschiff::zeige_werte();
 std::cout&lt;&lt;&quot;Raketen: &quot;&lt;&lt;m_raketen&lt;&lt;std::endl;
}
</code></pre>
<p>nun meine fragen:</p>
<p>wie baue ich dies zu einer doppelt verketteten list um?<br />
welche methoden sollte eine list bieten?<br />
wie kann ich meine push funktion so ausbauen, das sie &quot;sicher&quot; ein Raumschiff* entgegennimmt? (ist das push einer list eigentl dafür gedacht, ein objekt als parameter zu bekommen, welches in die liste eingetragen wird?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216708</guid><dc:creator><![CDATA[sdsds]]></dc:creator><pubDate>Thu, 25 Jan 2007 10:09:28 GMT</pubDate></item><item><title><![CDATA[Reply to doppelt verkettete Listen on Fri, 26 Jan 2007 08:18:52 GMT]]></title><description><![CDATA[<p>kann mir keiner meine fragen beantworten? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217350</guid><dc:creator><![CDATA[sdsds]]></dc:creator><pubDate>Fri, 26 Jan 2007 08:18:52 GMT</pubDate></item><item><title><![CDATA[Reply to doppelt verkettete Listen on Fri, 26 Jan 2007 22:34:02 GMT]]></title><description><![CDATA[<p>sdsds schrieb:</p>
<blockquote>
<p>kann mir keiner meine fragen beantworten? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Ja, ist schon komisch; bei anderen Threads purzeln die Antworten im Minuten-Tack und hier kommt nix. Vielleicht ist es zu viel Code bei einer zu wenig interessante Frage ...</p>
<p>sdsds schrieb:</p>
<blockquote>
<p>wie baue ich dies zu einer doppelt verketteten list um?</p>
</blockquote>
<p>Das ist nämlich einfach so, dass Du den Zeiger Raumschiff::pPrev bei push und pop einfach berücksichtigen musst. Ich habe die Stellen mit '//#' markiert</p>
<pre><code class="language-cpp">void LinkedList::push(Raumschiff* r) // push_front
{
    Raumschiff* pNew = r;
    if( pStart ) //#
    {
        pStart-&gt;pPrev = pNew;
    }
    pNew-&gt;pNext = pStart;
    pNew-&gt;pPrev = 0;  //#
    pStart = pNew;
}

void LinkedList::pop() // pop_front
{
    if(pStart!=NULL)
    {
        if( pStart-&gt;pNext ) //#
        {
            pStart-&gt;pNext-&gt;pPrev = 0;
        }
        Raumschiff* pOld = pStart;
        pStart = pStart-&gt;pNext;
        delete pOld;
        pOld = NULL;
    }
}
</code></pre>
<p>Die erste Methode push(int xPos, int yPos) solltest Du entfernen. Das gehört nicht in die Liste. Mache statt desse besser einen eigenen Konstruktor für Raumschiff</p>
<pre><code class="language-cpp">class Raumschiff
{
public:
    Raumschiff();
    Raumschiff(int Farbe);
    Raumschiff(int xPos, int yPos); //#
</code></pre>
<p>Weiter solltest Du noch über den Destruktor, Copy-Konstruktor und Zuweisungs-Operator der LinkedList nachdenken. Was sagt Dein Tutorial dazu?<br />
Und was steht in Deinen Tutorial zu Initialisierungslisten?</p>
<p>sdsds schrieb:</p>
<blockquote>
<p>welche methoden sollte eine list bieten?</p>
</blockquote>
<p>siehe std::list&lt;&gt;</p>
<p>sdsds schrieb:</p>
<blockquote>
<p>wie kann ich meine push funktion so ausbauen, das sie &quot;sicher&quot; ein Raumschiff* entgegennimmt?</p>
</blockquote>
<p>Tut sie das nicht?</p>
<p>sdsds schrieb:</p>
<blockquote>
<p>(ist das push einer list eigentl dafür gedacht, ein objekt als parameter zu bekommen, welches in die liste eingetragen wird?)</p>
</blockquote>
<p>eigentlich push_back für das Anhängen am Ende der Liste und push_front für das Anhängen am Anfang.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217872</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 26 Jan 2007 22:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to doppelt verkettete Listen on Mon, 29 Jan 2007 08:18:54 GMT]]></title><description><![CDATA[<p>nein nicht sicher, da ich ja zeiger übergebe!<br />
Wenn ich einen zeiger irgendwo erstelle, diesen übergebe, und dann den anderen lösche, verschwindet ja auch der in der liste oder?</p>
<p>mein tutorial sagt nix weiter zu initialisierungslisten, auch über destr und copy konstr finde ich nix!</p>
<p>kannst du mir da etwas erklären? oder mir ein gutes tutorial zu dem thema empfehlen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218981</guid><dc:creator><![CDATA[sadad]]></dc:creator><pubDate>Mon, 29 Jan 2007 08:18:54 GMT</pubDate></item><item><title><![CDATA[Reply to doppelt verkettete Listen on Mon, 29 Jan 2007 09:10:17 GMT]]></title><description><![CDATA[<p>Wenn Du es &quot;sicher&quot; haben willst, dann musst Du eine Kopie in die Liste tun.<br />
Geht in etwa so:</p>
<pre><code class="language-cpp">void LinkedList::push(Raumschiff* r) 
{ 
 Raumschiff* pNew = new Raumschiff(*r); 
 pNew-&gt;pNext = pStart; 
 pStart = pNew; 
}
</code></pre>
<p>Dazu brauchst Du natuerlich einen Copy-Constructor. Siehe z.B. hier <a href="http://www.fredosaurus.com/notes-cpp/oop-condestructors/copyconstructors.html" rel="nofollow">http://www.fredosaurus.com/notes-cpp/oop-condestructors/copyconstructors.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219007</guid><dc:creator><![CDATA[Apollon]]></dc:creator><pubDate>Mon, 29 Jan 2007 09:10:17 GMT</pubDate></item></channel></rss>