2016-11-20 6 views
-2

Ich bin neu im Codieren und versuche ein Array verknüpfter Listen zu implementieren. Ich habe die Struktur und das Array von Listen gefüllt, aber meine Druckfunktion druckt immer nur den Array-Index [0], erstes Listenelement, ohne den Zeiger auf das zweite Listenelement in Array [0] zu verschieben. Im Wesentlichen ist es eine Endlosschleife, die nur dieses erste Element druckt.Array mit verknüpften Listen drucken C++

Meine Frage ist: Wie verschiebe ich den Zeiger auf das nächste Element in der Liste, damit ich die Liste drucken und den Array-Index auf den nächsten Index verschieben kann?

Meine Struktur sieht wie folgt aus:

struct Node 
{ 
int Vertex; 
Node* next; 
}; 

und nach alle Knoten und Listen eingefügt, meine Druckfunktion sieht wie folgt aus:

void printList(Node* adjList[5]) 
{ 
    int a; 
    for (int b = 0; b <= 5; b++) 
    { 
     a = 0; 
     while (adjList[a]->next != NULL) 
     { 
      cout << "(" << adjList[a]->Vertex; 
      cout << ", " << adjList[a]->next->Vertex << ") "; 
      cout << a << endl; 
      system("pause");    
     } 
     a++; 
    } 
    cout << endl << endl; 
} 

Ignorieren Sie den Teil, wo ich drucken „a“ und dann Pause, weil ich versuchte, ein anderes Problem herauszufinden, das ich hatte. Aber jetzt denke ich, dass ich den Zeiger zum nächsten Element in der Liste an jedem Array-Index bewegen muss.

EDIT: Nach dem Kommentar unten zu lesen, hier ist mein Haupt mit der Erzeugung eines kleinen Teil der Array-Liste:

int main() 
{ 
    Node *adjList[5]; 
    adjList[0] = new Node; 
    adjList[0]->Vertex = 1; 
    adjList[0]->next = new Node; 
    adjList[0]->next->Vertex = 4; 
    adjList[1] = new Node; 

    ... 

    printList(adjList); 
+0

Willkommen bei stackoverlow. Bitte poste einen MCVE (siehe http://stackoverflow.com/help/mcve), inklusive main. Ihr Problem könnte von einem Code stammen, den Sie nicht veröffentlicht haben. Dann können wir nicht helfen. – jpo38

+0

'while (adjList [a] -> next! = NULL)' wird mit einer Endlosschleife enden, wenn die Bedingung wahr ist, da es in der while-Schleife nichts gibt, das die Bedingung ändern würde ... – jpo38

+0

why is wird immer wieder auf 0 nach der While-Schleife initialisiert? Versuche adjList [a] = adjList [a] -> next in der letzten Zeile innerhalb der while-Schleife. Sie durchlaufen die Liste nicht. –

Antwort

0

Es ist schwer zu wissen, was Ausgabe, die Sie für Ihre Druckfunktion erwarten. Der folgende Code sollte jedoch etwas korrekt ohne Absturz ausgeben. Beachten Sie, dass ich Rekursion durch printNode eingeführt habe, um sicherzustellen, dass Kindknoten gedruckt werden!

void printNode(Node* node) 
{ 
    if (node != NULL) 
    { 
     cout << "(" << node->Vertex; 
     cout << ", "; 
     printNode(node->next); 
     cout << ")"; 
    } 
    else 
    { 
     cout << "null"; 
    } 
} 

void printList(Node* adjList[5]) 
{ 
    for (size_t index = 0; index < 5; index++) 
    { 
     printNode(adjList[index]); 
     cout << endl; 
    } 
} 

Sie müssen sicherstellen, dass nicht verwendete next Attribute gesetzt werden auf NULL so dass Rekursion gestoppt werden kann. So Ihre Initialisierung muss sein:

Node *adjList[5]; 
adjList[0] = new Node; 
adjList[0]->Vertex = 1; 
adjList[0]->next = new Node; 
adjList[0]->next->Vertex = 4; 
adjList[0]->next->next = NULL; // added, was uninitialized 
adjList[1] = new Node; 
... 

von Beispiel dieses Programm:

int main() 
{ 
    Node *adjList[5]; 
    adjList[0] = new Node; 
    adjList[0]->Vertex = 1; 
    adjList[0]->next = new Node; 
    adjList[0]->next->Vertex = 4; 
    adjList[0]->next->next = NULL; // added, was uninitialized 
    adjList[1] = new Node; 
    adjList[1]->Vertex = 6; 
    adjList[1]->next = new Node; 
    adjList[1]->next->Vertex = 7; 
    adjList[1]->next->next = NULL; // added, was uninitialized 
    adjList[2] = NULL; 
    adjList[3] = NULL; 
    adjList[4] = NULL; 
    printList(adjList); 

    return 0; 
} 

Ausgänge:

(1, (4, null)) 
(6, (7, null)) 
null 
null 
null 
Verwandte Themen