<?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[Sentinel und Listenkopf]]></title><description><![CDATA[<p>Hallo,</p>
<p>Wie kann ich mit einem Sentinel und Listenkopf in einer einfach verketteten Liste arbeiten?<br />
Ich hab dazu noch nichts im Internet bzw. in meinen Büchern gefunden ... hab hier mal ein kleines Beispiel ohne Sentinel und Listenkopf:</p>
<p>dekl:</p>
<pre><code class="language-csharp">class Kset
{
private:
        struct Knoten
        {
         int Inhalt;
         Knoten *pNext;
        };

        int Anzahl;
        Knoten *pFirst;
        Knoten *pLast;

public:
        Kset();
        ~Kset();

        void insert_front(int obj);
};
</code></pre>
<p>impl:</p>
<pre><code class="language-csharp">#include &quot;dekl11.h&quot;

//Konstruktor///////////////////////////////////////////////////////////////////

Kset::Kset()
{
 Anzahl = 0;
 pFirst = pLast = NULL;
 /*Knoten *Listenkopf = new Knoten;
 Knoten *Sentinal = new Knoten;
 pFirst = Listenkopf;
 Listenkopf-&gt;pNext = Sentinal;
 Sentinal-&gt;pNext = pLast;*/
}

//Dekonstruktor/////////////////////////////////////////////////////////////////

Kset::~Kset()
{
 Knoten *ptemp = pFirst;
 for(; Anzahl&gt;0;)
 {
  pFirst = pFirst-&gt;pNext;
  delete ptemp;
  ptemp = pFirst;
  Anzahl--;
 }
}

//vorne einfügen////////////////////////////////////////////////////////////////

void Kset::insert_front(int obj)
{
 if(Anzahl == 0)
 {
  pFirst = new Knoten;
  pFirst-&gt;Inhalt = obj;
  pFirst-&gt;pNext = NULL;
  pLast = pFirst;
 }
 else
 {
  Knoten *pNew = new Knoten;
  pNew-&gt;Inhalt = obj;
  pNew-&gt;pNext = pFirst;
  pFirst = pNew;
 }
Anzahl++;
}
</code></pre>
<p>Wie sieht das ganze aber mit aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/140635/sentinel-und-listenkopf</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 06:57:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/140635.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Mar 2006 10:52:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sentinel und Listenkopf on Thu, 16 Mar 2006 10:52:58 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Wie kann ich mit einem Sentinel und Listenkopf in einer einfach verketteten Liste arbeiten?<br />
Ich hab dazu noch nichts im Internet bzw. in meinen Büchern gefunden ... hab hier mal ein kleines Beispiel ohne Sentinel und Listenkopf:</p>
<p>dekl:</p>
<pre><code class="language-csharp">class Kset
{
private:
        struct Knoten
        {
         int Inhalt;
         Knoten *pNext;
        };

        int Anzahl;
        Knoten *pFirst;
        Knoten *pLast;

public:
        Kset();
        ~Kset();

        void insert_front(int obj);
};
</code></pre>
<p>impl:</p>
<pre><code class="language-csharp">#include &quot;dekl11.h&quot;

//Konstruktor///////////////////////////////////////////////////////////////////

Kset::Kset()
{
 Anzahl = 0;
 pFirst = pLast = NULL;
 /*Knoten *Listenkopf = new Knoten;
 Knoten *Sentinal = new Knoten;
 pFirst = Listenkopf;
 Listenkopf-&gt;pNext = Sentinal;
 Sentinal-&gt;pNext = pLast;*/
}

//Dekonstruktor/////////////////////////////////////////////////////////////////

Kset::~Kset()
{
 Knoten *ptemp = pFirst;
 for(; Anzahl&gt;0;)
 {
  pFirst = pFirst-&gt;pNext;
  delete ptemp;
  ptemp = pFirst;
  Anzahl--;
 }
}

//vorne einfügen////////////////////////////////////////////////////////////////

void Kset::insert_front(int obj)
{
 if(Anzahl == 0)
 {
  pFirst = new Knoten;
  pFirst-&gt;Inhalt = obj;
  pFirst-&gt;pNext = NULL;
  pLast = pFirst;
 }
 else
 {
  Knoten *pNew = new Knoten;
  pNew-&gt;Inhalt = obj;
  pNew-&gt;pNext = pFirst;
  pFirst = pNew;
 }
Anzahl++;
}
</code></pre>
<p>Wie sieht das ganze aber mit aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1017398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1017398</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Thu, 16 Mar 2006 10:52:58 GMT</pubDate></item><item><title><![CDATA[Reply to Sentinel und Listenkopf on Thu, 16 Mar 2006 21:53:15 GMT]]></title><description><![CDATA[<p>Deine insert_front-Methode würde mit Sentinel auch nicht viel anders aussehen. Der Vorteil kommt bei einer einfach verketteten Liste nur bei Operationen am Ende zum tragen. Bei push_back z.B. (füge Element am Ende ein) kann auf jede Sonderbehandlung verzichtet werden.</p>
<p>Zum Beispiel</p>
<pre><code class="language-cpp">// -- mit Sentinel
class Kset
{
private:
    struct Knoten
    {
        explicit Knoten( int i = 0, Knoten* next_ = 0 )
            : Inhalt( i ), pNext( next_ )
        {}
        int Inhalt;
        Knoten *pNext;
    };

    int Anzahl;
    Knoten m_head; // &lt;-- Sentinel
    Knoten *pLast;
    // ... usw.

Kset::Kset()
    : Anzahl( 0 )
    , m_head()
    , pLast( &amp;m_head )
{}

void Kset::push_back( int obj )
{   // 'pLast' zeigt auch bei leerer Liste auf einen gültigen Knoten
    pLast-&gt;pNext = new Knoten( obj );
    pLast = pLast-&gt;pNext;
    ++Anzahl;
}
</code></pre>
<p>bei pop_back (entferne das letzte Element) wäre es ähnlich.</p>
<p>ohne Sentinel - also mit den Parametern, die Du gepostet hast - sähe push_back etwa so aus:</p>
<pre><code class="language-cpp">// -- ohne Sentinel
void Kset::push_back( int obj )
{
    if( pFirst ) // Liste ist nicht leer
    {
        pLast-&gt;pNext = new Knoten( obj );
        pLast = pLast-&gt;pNext;
    }
    else  // Liste ist bisher leer
    {
        pFirst = new Knoten( obj );
        pLast = pFirst;
    }
    ++Anzahl;
}
</code></pre>
<p>So richtig vorteilhaft ist ein Sentinel erst bei einer doppelt verketteten Liste. Dann ist jede Einfüge- oder Lösch-Operation immer gleich, egal an welcher Stelle der Liste sie stattfindet.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1017935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1017935</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 16 Mar 2006 21:53:15 GMT</pubDate></item><item><title><![CDATA[Reply to Sentinel und Listenkopf on Fri, 17 Mar 2006 09:34:40 GMT]]></title><description><![CDATA[<p>danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018055</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Fri, 17 Mar 2006 09:34:40 GMT</pubDate></item></channel></rss>