2017-05-21 3 views
-1

Ich wurde ermutigt, C++ ohne oo Konzepte zu verwenden. Ich habe an der Funktion "InsertIntoSortedList" mit doppelt verknüpften Liste gearbeitet. Es erlaubt mir jedoch, den ersten Knoten einzufügen. Ab dem zweiten Knoten springt er aus der Funktion heraus. Here is the Sample Output. Der Code funktioniert gut auf einem einfachen Programm, also habe ich versucht, es auf einem komplizierteren Programm zu verwenden. Ich werde die Codierung für beide Programme unten setzen.C++ Doppelt verknüpfte Liste ohne OO-Konzepte In sortierte Liste einfügen

void InsertIntoSortedList(){ 

newnode = new carlist; 
newnode->next = NULL; 
newnode->back = NULL; 
    if (head == NULL) { 
     cout << "List is empty, Please insert Data: " << endl; 
     cout << "ID: "; 
     cin >> newnode->id; 
     cout << "Description: "; 
     cin >> newnode->description; 
     cout << "Price: "; 
     cin >> newnode->price; 
     cout << "Stock: "; 
     cin >> newnode->stock; 
     head = tail = newnode; 

    } 
    else if (newnode->price < head->price) { 

     InsertAtBeginning(); 
    } 
    else { 

     temp = head; 
     while (temp != NULL) { 
      if (newnode->price > temp->price) { 
       previous = temp; 
      } 
      else { 
       break; 
      } 
      temp = temp->next; 
     } 
     if (temp == NULL) { 
      InsertAtEnd(); 
     } 
     else { 
      newnode->next = previous->next; 
      previous->next->back = newnode; 
      previous->next = newnode; 
      newnode->back = previous; 
     } 
    } 

es funktioniert auf diesem Programm feinen

void insertIntoSortedList(int eid) { 
newnode = new employee; 
newnode->employeeID = eid; 
newnode->next = NULL; 
newnode->back = NULL; 
if (head == NULL) { 
    head = tail = newnode; 
} 
else if (eid < head->employeeID) { 

    insertatBeginning(eid); 
} 
else { 
    temp = head; 
    while (temp != NULL) { 
     if (eid > temp->employeeID) { 
      previous = temp; 
     } 
     else { 
      break; 
     } 
     temp = temp->next; 
    } 
    if (temp == NULL) { 
     insertAtEnd(eid); 
    } 
    else { 
     newnode->next = previous->next; 
     previous->next->back = newnode; 
     previous->next = newnode; 
     newnode->back = previous; 
    } 
} 

Könnte jemand mir erklären, was das Problem ist, und warum es nicht funktionieren könnte? Ich versuche sogar, die doppelt verkettete Liste herauszuziehen, und ich denke, es sollte gut funktionieren. Dieses Ding nervt mich die ganze Nacht. Vielen Dank im Voraus.

+1

Sie sollten wirklich 'nullptr', nicht' NULL' verwenden. –

Antwort

1

Einige Probleme:

1) Der einzige Ort, die Funktion keine Daten erfolgt, wenn Kopf null ist. Nimm den Eingabecode aus der if-Anweisung und debugge von dort.

2) Um mehr als einen Knoten zu nehmen, benötigen Sie eine Art von Schleife. Beste dieser Schleife zu setzen, zusammen mit dem Eingangscode, den Sie gerade oben entfernt, in eine Hauptfunktion:

int main() { 

    newnode = new carlist; 

    while (newnode != nullptr) 
    { 

     newnode->next = nullptr; 
     newnode->back = nullptr; 
     cout << " Please insert Data: " << endl; 

     cout << "ID: "; 
     cin >> newnode->id; 
     cout << "Description: "; 
     cin >> newnode->description; 
     cout << "Price: "; 
     cin >> newnode->price; 
     cout << "Stock: "; 
     cin >> newnode->stock; 

     InsertIntoSortedList(newnode); 

     cout << "To exit write \"exit\", or any other key to continue : "); 
     string exitnow; 
     cin >> exit; 
     if (exitnow == "exit") 
      newnode = nullptr; 
     else 
      newnode = new carlist; 

    } 



     return 0; 
} 

Für den Rest des Codes, die wir sehen, sind nicht, am besten, einen Debugger zu verwenden und versuchen zu verstehen, was jeder Kontrollpfad macht.

+0

danke! Ich werde weitermachen! – David666

+0

danke ich würde mich freuen wenn du die antwort annehmen könntest wenn es dir tatsächlich geholfen hat :) – didiz

Verwandte Themen