Klitze Kleines Prob mit doppelt verketteter Liste

WinDWalker

Mitglied
Hi Leute :) ,

ich hab mich in letzter Zeit mit verketteten Listen Bäumen etc auseinandergesetzt.
Soweit funktioniert eigentlich alles ;) .
Aber eine Frage hab ich, ich hab hier ein kleines Beispielprg. geschrieben, das soweit funktioniert.
Nur wenn ich in dem Teil *** Neues beliebiges Objekt einfügen ***
das erste cout ein- und das zweite cout auskommentiere bekomm ich die Fehlermeldung:Die Anweisung in XXX verweist auf den Speicher in XXX, der Vorgang read konnte nicht ausgeführt werden ... . :confused: :( :(
Ich müsste aber doch mit previous = prev genauso nach oben wie mit next nach unten duch die Liste gehen können.
Wisst ihr was ich falsch mach und vorallen wie es richtig geht ?
Hier mal mein code:

Code:
#include<iostream>

using namespace std;

struct mvListe
{
    int data;
   
    mvListe *prev;
    mvListe *next;
};

mvListe *neu    = NULL;
mvListe *head    = NULL;
mvListe *current= NULL;

void showList(mvListe *head, char const headline[]);

void main()
{

    int i = 0;
    for (i = 0; i < 10 ; i++)
    {
        neu = new mvListe;
        neu->next = head;
        head = neu;
        neu->data = i;
    }
        showList(head,"Neue Liste");

       
   
//****************************** Neues erstes Objekt einfügen **********************************


        neu = new mvListe;
   
        neu->prev = head;
        neu->next = neu->prev;
        head = neu;

        neu->data = 1024;

        showList(head,"Neues erstes Element");

   
//****************************** Neues letztes Objekt einfügen ***********************************


        neu = new mvListe;
       
        current = head;

        while (current->next!= NULL)
        {
            current = current->next;
        }
         neu->prev = current;
        current->next = neu;
        neu->next = NULL;
       
        neu->data = 2048;

        showList(head,"Neues letztes Element");


//****************************** Neues beliebiges Objekt einfügen *********************************


        neu = new mvListe;
       
        int j = 0;
        int index = 5;
        current = head;

        while (j < index)
        {
            current = current->next;
            j++;
        }

        neu->next = current->next;
        current->next = neu;

        neu->prev = current;

        neu->data = 3072;

        showList(head,"Neues beliebiges Element");

      // cout << neu->prev->prev->prev->data << endl << endl; :confused:

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

}





void showList(mvListe *head, char const headline[])
{
    cout << headline << endl << endl;
    current = head;
    while (current != NULL)
    {
        cout << current->data << endl;
        current = current->next;
    }
    cout << endl << endl;
}
C/C++ Code:
#include<iostream>

using namespace std;

struct mvListe
{
int data;

mvListe *prev;
mvListe *next;
};

mvListe *neu = NULL;
mvListe *head = NULL;
mvListe *current= NULL;

void showList(mvListe *head, char const headline[]);

void main()
{

int i = 0;
for (i = 0; i < 10 ; i++)
{
neu = new mvListe;
neu->next = head;
head = neu;
neu->data = i;
}
showList(head,"Neue Liste");



//****************************** Neues erstes Objekt einfügen **********************************


neu = new mvListe;

neu->prev = head;
neu->next = neu->prev;
head = neu;

neu->data = 1024;

showList(head,"Neues erstes Element");


//****************************** Neues letztes Objekt einfügen ***********************************


neu = new mvListe;

current = head;

while (current->next!= NULL)
{
current = current->next;
}
neu->prev = current;
current->next = neu;
neu->next = NULL;

neu->data = 2048;

showList(head,"Neues letztes Element");


//****************************** Neues beliebiges Objekt einfügen *********************************


neu = new mvListe;

int j = 0;
int index = 5;
current = head;

while (j < index)
{
current = current->next;
j++;
}

neu->next = current->next;
current->next = neu;

neu->prev = current;

neu->data = 3072;

showList(head,"Neues beliebiges Element");

// cout << neu->prev->prev->prev->data << endl << endl; :confused:

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

}





void showList(mvListe *head, char const headline[])
{
cout << headline << endl << endl;
current = head;
while (current != NULL)
{
cout << current->data << endl;
current = current->next;
}
cout << endl << endl;
}
C/C++ Code:
#include<iostream>

using namespace std;

struct mvListe
{
    int data;
   
    mvListe *prev;
    mvListe *next;
};

mvListe *neu    = NULL;
mvListe *head    = NULL;
mvListe *current= NULL;

void showList(mvListe *head, char const headline[]);

void main()
{

    int i = 0;
    for (i = 0; i < 10 ; i++)
    {
        neu = new mvListe;
        neu->next = head;
        head = neu;
        neu->data = i;
    }
        showList(head,"Neue Liste");

       
   
//****************************** Neues erstes Objekt einfügen **********************************


        neu = new mvListe;
   
        neu->prev = head;
        neu->next = neu->prev;
        head = neu;

        neu->data = 1024;

        showList(head,"Neues erstes Element");

   
//****************************** Neues letztes Objekt einfügen ***********************************


        neu = new mvListe;
       
        current = head;

        while (current->next!= NULL)
        {
            current = current->next;
        }
         neu->prev = current;
        current->next = neu;
        neu->next = NULL;
       
        neu->data = 2048;

        showList(head,"Neues letztes Element");


//****************************** Neues beliebiges Objekt einfügen *********************************


        neu = new mvListe;
       
        int j = 0;
        int index = 5;
        current = head;

        while (j < index)
        {
            current = current->next;
            j++;
        }

        neu->next = current->next;
        current->next = neu;

        neu->prev = current;

        neu->data = 3072;

        showList(head,"Neues beliebiges Element");

      // cout << neu->prev->prev->prev->data << endl << endl; :confused:

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

}





void showList(mvListe *head, char const headline[])
{
    cout << headline << endl << endl;
    current = head;
    while (current != NULL)
    {
        cout << current->data << endl;
        current = current->next;
    }
    cout << endl << endl;
}
vielen Dank schon mal für eure Mühe

WindWalker
 
Sorry wegen dem Code Chaos, hier der richtige :


Code:
#include<iostream>

using namespace std;

struct mvListe
{
    int data;
   
    mvListe *prev;
    mvListe *next;
};

mvListe *neu    = NULL;
mvListe *head    = NULL;
mvListe *current= NULL;

void showList(mvListe *head, char const headline[]);

void main()
{

    int i = 0;
    for (i = 0; i < 10 ; i++)
    {
        neu = new mvListe;
        neu->next = head;
        head = neu;
        neu->data = i;
    }
        showList(head,"Neue Liste");

       
   
//****************************** Neues erstes Objekt einfügen **********************************


        neu = new mvListe;
   
        neu->prev = head;
        neu->next = neu->prev;
        head = neu;

        neu->data = 1024;

        showList(head,"Neues erstes Element");

   
//****************************** Neues letztes Objekt einfügen ***********************************


        neu = new mvListe;
       
        current = head;

        while (current->next!= NULL)
        {
            current = current->next;
        }
         neu->prev = current;
        current->next = neu;
        neu->next = NULL;
       
        neu->data = 2048;

        showList(head,"Neues letztes Element");


//****************************** Neues beliebiges Objekt einfügen *********************************


        neu = new mvListe;
       
        int j = 0;
        int index = 5;
        current = head;

        while (j < index)
        {
            current = current->next;
            j++;
        }

        neu->next = current->next;
        current->next = neu;

        neu->prev = current;

        neu->data = 3072;

        showList(head,"Neues beliebiges Element");

      // cout << neu->prev->prev->prev->data << endl << endl; :confused:

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

}





void showList(mvListe *head, char const headline[])
{
    cout << headline << endl << endl;
    current = head;
    while (current != NULL)
    {
        cout << current->data << endl;
        current = current->next;
    }
    cout << endl << endl;
}
 
Hi.

Du kannst hier übrigens deine Beiträge auch überarbeiten anstatt nochmal noch einen Beitrag dranzuhängen.

C++ Code kannst du auch in [code=cpp]...[/code] Tags einschliessen, dann sieht's gleich viel schöner aus. :)
WinDWalker hat gesagt.:
Code:
    int i = 0;
    for (i = 0; i < 10 ; i++)
    {
        neu = new mvListe;
        neu->next = head;
        head = neu;
        neu->data = i;
    }
Du sagst du hast eine doppelt verkette Liste, verkettest die Liste aber nicht doppelt? Was ist denn mit den prev Zeigern der Listenelemente? Die zeigen doch nirgendwo hin. Da ist es nicht verwunderlich das das Programm abstürzt sobald du auf prev irgendeiner der ersten 10 Listenelemente zugreifst.

Gruß
 
Hi deepthroat,

stimmt da hast Du recht, kannst Du mir Code Mässig unter die Arme greifen ich versuch das schon seit Tagen hinzubekommen aber es klappt net.
Ich code c / c++ erst seit 3 Monaten ;-)

Bye
WindWalker
 
Na, du mußt doch nur die prev Zeiger auf die vorigen Elemente setzen die schon vorhanden sind. Am besten initialisiert du am Anfang die Elemente mit 0 so das du feststellen kannst wo die Liste aufhört bzw. anfängt. Etwa so:
C++:
head = new mvListe;
head->next = 0; // Ende der Liste markieren.
for (int i = 0; i < 10; i++) { // 10 Elemente an head vorhängen
  neu = new mvListe;
  neu->next = head;
  head->prev = neu;
  neu->data = i;
  head = neu;
}
head->prev = 0;
Gruß
 
WinDWalker hat gesagt.:
wow D*A*N*K*E Deepthroat,

Du hast mich auf den richtigen weg gebracht ! ;-)
Gut. :) Wenn dein Problem damit gelöst ist, dann markier doch das Thema bitte noch als erledigt.

WinDWalker hat gesagt.:
Falls DuBock hast zu chatten schick mir ne mail
ShadowEater@gmx.net
dann können wir besser labern, wie gesgt wenn Du Lust hast ;-)
Leider hab ich für's chatten nicht soviel Zeit - gestern war ich da schon weg als du geschrieben hast.

Du kannst mir aber eine PN (persönliche Nachricht) schicken wenn dir was unter den Nägeln brennt was du nicht hier im Forum schreiben willst.

Gruß
 
Zurück