Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Einfach verkettete Listen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.08.2006, 15:35 Uhr
WindDancer1



Hi Leute ,

ich hab hier nen kleinen Code geschrieben um verkettete Listen zu lernen.
Natürlich erst mal einfach verkettete später dann doppelt verkettete.
Hier der Code:


C++:
#include <iostream>
using namespace std;

struct Listenknoten
{  
    int data;
    static int counter;
    Listenknoten *next;
};


static int counter = 0;
Listenknoten *head = NULL;
Listenknoten *neu = NULL;


void main()
{
    int inhalt = 0;
    int i = 0;

    for (i = 0; i < 10; i++)
    {
        Listenknoten *neu = new Listenknoten;
      
                neu->next = head;
        head = neu;
         neu->data = inhalt + 1;
        counter++;
        inhalt++;
    }


// **************************** Erstes Element eingefuegen ***********************************
        Listenknoten *neu = new Listenknoten;  
          
                neu->next = head;
        head = neu;                                        neu->data = inhalt + 200;
        counter++;

         cout << head->data << endl << endl << endl;

}
C/C++ Code:
#include <iostream>
using namespace std;

struct Listenknoten
{
int data;
static int counter;
Listenknoten *next;
};


static int counter = 0;
Listenknoten *head = NULL;
Listenknoten *neu = NULL;


void main()
{
int inhalt = 0;
int i = 0;

for (i = 0; i < 10; i++)
{
Listenknoten *neu = new Listenknoten;

neu->next = head;
head = neu;
neu->data = inhalt + 1;
counter++;
inhalt++;
}


// **************************** Erstes Element eingefuegen ***********************************
Listenknoten *neu = new Listenknoten;

neu->next = head;
head = neu; neu->data = inhalt + 200;
counter++;

cout << head->data << endl << endl << endl;

}
C/C++ Code:
#include <iostream>
using namespace std;

struct Listenknoten
{  
    int data;
    static int counter;
    Listenknoten *next;
};


static int counter = 0;
Listenknoten *head = NULL;
Listenknoten *neu = NULL;


void main()
{
    int inhalt = 0;
    int i = 0;

    for (i = 0; i < 10; i++)
    {
        Listenknoten *neu = new Listenknoten;
      
                neu->next = head;
        head = neu;
         neu->data = inhalt + 1;
        counter++;
        inhalt++;
    }


// **************************** Erstes Element eingefuegen ***********************************
        Listenknoten *neu = new Listenknoten;  
          
                neu->next = head;
        head = neu;                                        neu->data = inhalt + 200;
        counter++;

         cout << head->data << endl << endl << endl;

}



Ich hab per Forschleife ne Liste mit 10 Elementen erstellt und versuche dann ein neues erstes Element einzufügen.
Wenn ich dann die Ausgabe mache

C++:
cout << head->data << endl << endl << endl;

cout << head->data << endl << endl << endl;

cout << head->data << endl << endl << endl;


wird das erste (das neu eingefügte) Element ausgegeben 210.

Mit head->next kann ich mich über die Nachfolger durchhangeln bis zum Ende der Liste.

ABER 1. müsste dann nicht diese Ausgabe

C++:
cout << head->next->data << endl << endl << endl;

cout << head->next->data << endl << endl << endl;

cout << head->next->data << endl << endl << endl;



dazu führen dass die Zahl 1 ausgegeben wird und nicht die Zahl 10. :confused:

2. wie füge ich z.b.: 3 Elemente zwischen das beispielsweise 5. und 6. Element der Liste ein. :confused:

3. wie lasse ich das z.b.:4. 6. und 9. Element ausgeben? :confused:

Tut mir leid wenn sich die Fragerei etwas dämlich anhört aber ich verknot mir schon seit Stunden das Gehirn. Ich weiss auch dass in c++ statt Structs die Klassen die erste Wahl sind aber ich wollts erst in C verstanden haben.

Vielen Dank schon mal vorab

ShadowEater


Bearbeitung:

Bitte Codetags verwenden


Dieser Post wurde am 02.08.2006 um 20:20 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.08.2006, 17:03 Uhr
~Blubber2063
Gast


Erstmal gewöhne dir mal an für ne Liste ne eigene Klasse oder Struktur anzulegen, ist übersichtlicher und wiederverwendbar, dann ist die Ausgabe logisch, du hast nen Stack erschaffen first in last out, d.h. deine liste sieht so aus:
210:10:9:...:1

Dann fügst du die Elemente dazwischen ganz einfach ein, indem du die über die Liste iterierst bis du zu dem index gelangst an dem du etwas einfügen willst, d.h. du merkst dir immer den Vorgänger und den aktuellen Knoten. Hast du die Stelle gefunden, dann biegst du den next Zeiger vom Vorgänger auf den neuen Knoten und den next Zeiger vom neuen Knoten auf den akutellen Knoten, erhöhst deinen inhalt und fertig. Beachte aber die Sonderfälle, also leere Liste oder es gibt nur ein Element, der Index ist bereits 1 größer als die Liste gross ist, also normales anfügen am ende.

Gruß Blubber
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.08.2006, 12:18 Uhr
WindDancer1



D*A*N*K*E für Deine Mühe !



WD
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: