Ich habe schon eine ganze Weile auf Google und ein paar Lehrbüchern gesucht und ich kann nicht verstehen, warum es ist, wenn Sie eine verknüpfte Liste erstellen Die Knoten müssen Zeiger sein.Erstellen einer verketteten Liste ohne Deklaration von Knoten als Zeiger
Eg. Wenn ich einen Knoten wie folgt definiert:
typedef struct Node{
int value;
struct Node *next;
} Node;
warum ist es, dass, um eine Liste zu erstellen, würde ich sagen:
Node *a = malloc(sizeof(Node));
Node *b = malloc(sizeof(Node));
a->value = 1;
b->value = 2;
a->next = b;
b->next = NULL;
statt:
Node a, b;
a.value = 1;
b.value = 2;
a.next = &b;
b.next = NULL;
Zu meiner Verständnis, die Liste wird immer noch in der Lage sein, referenziert und durchlaufen als normal, der einzige Unterschied ist die Verwendung des Punktes, Ampersand-Syntax und nicht den Pfeil?
Ihr 'Node * a, * b 'Snippet ist invalild. Sie deklarieren Zeigervariablen, ohne dass sie auf gültigen Speicher verweisen. Die Zeiger zeigen mit ziemlicher Sicherheit nicht auf gültige 'Node'-Objekte –
Mit Ihrem zweiten Beispiel überlegen Sie, wie Sie Hunderte von neuen Knoten zu Ihrer Liste hinzufügen würden. Mithilfe von Zeigern können Sie malloc weiterhin verwenden, um neue Knoten innerhalb einer Schleife hinzuzufügen. Ohne Zeiger müssen Sie den Speicher auf andere Weise zuweisen, was den Vorteil der Verwendung einer verknüpften Liste etwas zunichte macht. – Neil