2017-06-17 4 views
-1

Ich versuche, linear verknüpfte Liste rekursiv mit c-Sprache, erstellen, aber halten Sie hier und der Code funktioniert nicht mit dem Fehler "Linker Tools Error LNK2019". Leider kann ich nicht verstehen, was los ist. Hier ist mein Code.Erstellen und Anzeigen von linearen verketteten Liste in C (rekursiv)

Vielen Dank für Ihre große Hilfe im Voraus.

#include <stdio.h> 
#include <stdlib.h> 


struct node 
{ 
    char num;      //Data of the node 
    struct node *nextptr;   //Address of the next node 
}; 
typedef struct node element; 
typedef element *link; 
link head; 


void displayList();   // function to display the list 

int main() 
{ 
    char s[] = "abc"; 
    link stol(s); 
    { 
     link head; 
     if (s[0] == '\0')return(NULL); 
     else { 
      head = (link)malloc(sizeof(element)); 
      head->num = s[0]; 
      head->nextptr = stol(s + 1); 
      return(head); 
     } 
    } 

    printf("\n\n Linked List : To create and display Singly Linked List :\n"); 
    printf("-------------------------------------------------------------\n"); 

    displayList(); 
    return 0; 
} 


void displayList() 
{ 
    link tmp; 
    if (head == NULL) 
    { 
     printf(" List is empty."); 
    } 
    else 
    { 
     tmp = head; 
     while (tmp != NULL) 
     { 
      printf(" Data = %d\n", tmp->num);  // prints the data of current node 
      tmp = tmp->nextptr;      // advances the position of current node 
     } 
    } 
} 
+0

Definieren Sie 'stol'-Funktion außerhalb (und vor)' Haupt'-Funktion. – BLUEPIXY

+0

Danke. Meinst du ich muss "Link stol" außerhalb (und vor) Hauptfunktion setzen? –

+0

Ich meine wie [dies] (http://ideone.com/IHPo0I) – BLUEPIXY

Antwort

0

Sie definieren einen link Objekt head in Ihrer main() Funktion aufgerufen. Es verbirgt die globale head Variable.

Das Entfernen der Definition innerhalb main würde Ihr Problem beheben, aber Sie sollten in jedem Fall einen link* als Parameter an Ihre displayList Funktion übergeben.

Ich habe gerade diese Aussage return(head); in main() bemerkt. Sie programmieren das Programm auch vorzeitig als Ergebnis.

Jedes Mal wenn ich Ihre App anschaue, finde ich mehr Probleme. Wenn ich Sie wäre, würde ich zunächst eine Funktion erstellen, die der Liste einen Knoten hinzufügt. Es ist viel einfacher, neue Knoten an der Vorderseite der Liste hinzuzufügen, also sollten Sie das zuerst versuchen. Versuchen Sie, zum Schwanz zu addieren, sobald Sie dieses laufen lassen. Das Hinzufügen zum Tail ist sehr ähnlich, aber Sie müssen 'gehen' the list first to get to the last element, exactly as you already do in displayList() `Eine andere Möglichkeit besteht darin, die Adresse des letzten Knotens *, den Sie der Liste hinzugefügt haben, beizubehalten. Wie ich schon sagte, fügt es ein bisschen Komplexität hinzu, also sollte es zuerst mit addToHead funktionieren.

void addToHead(link* l, node* n) 
{ 
    n->nextptr = l->nextptr; 
    l->nextptr = n; 
} 

in der Haupt, können Sie einen neuen Knoten zu einem Zeitpunkt vergeben, wie Sie mit malloc bereits tun(). Initialisiere seinen Inhalt num mit einer ganzen Zahl und lass addToHead mit dem Pointerstuff umgehen. Ihre Verwendung von Zeigern ist schrecklich, aber Listen sind ziemlich einfach, und addToList zeigt ziemlich genau, was und was in Zeiger eingefügt werden sollte - nämlich andere Zeiger.

Sie können fast alles in main() vor dem ersten Druck löschen. Du musst

  1. Startschleife:
  2. eine Aufforderung schreiben, damit der Benutzer weiß, was printf (mit zu tun)
  3. Eingabe vom Benutzer gelesen scanf mit ("% d", & n), oder gleichwertig.
  4. Unterbrechung der Schleife, wenn der Benutzer einen negativen Wert eingibt.
  5. malloc() ein neuer Knoten
  6. seinen Datensatz num = n
  7. Anruf addToHead den Knoten hinzuzufügen.
  8. Schleife, bis der Benutzer eine leere Zeichenfolge eingibt, oder -1.

Das sollte etwa 8 bis 10 Zeilen Code benötigen. Im Zweifelsfall finden Sie leicht Dokumentation auf scanf, mit Google oder http://en.cppreference.com/w/c.

+0

Danke! Mit diesem Kommentar ordne ich endlich mein gesamtes chaotisches konzeptionelles Denken von 'global & local variable' durch googeln an :) –

Verwandte Themen