Erstellen und Verstehen verknüpfter Listen von Strukturen in C
Ich habe Probleme, die Konzepte von zu verstehenstruct
und die verknüpfte Listendatenstruktur zusammen. Nehmen wir zum Beispiel an, wir haben diesen Code: astruct
Das hat den Inhalt eines Workers und eine verknüpfte Liste dieser Strukturen, die die Knoten jedes Workers und einen Zeiger auf den nächsten Knoten (?) enthält.
typedef struct Schedule {
char name[10];
char description[10];
int hours;
int workordernum;
} Work;
typedef struct linkedlist {
struct Schedule work;
struct linkedlist *next;
} Node;
Das Problem besteht darin, wie Sie eine Methode erstellen, die immer einen Knoten am Anfang der Liste hinzufügt. Diese Methode fügt ihn an einer beliebigen Stelle (in der Mitte) der Liste mit benutzerdefinierten Optionen hinzuworkordernum
und eine Methode, die es immer ans Ende bringt.
Ich verstehe nicht ganz->
und*
richtig verwendet. Ich habe online gelesen, wie man Head- und Tail-Nodes erstellt, aber ich habe ihre Verwendung nicht richtig verstanden, da sie eine hattenstruct
für eine Liste und astruct
für einen Knoten.
Eine andere Sache, die ich nicht mitbekommen habe, ist, dass das Hinzufügen eines Knotens am Anfang der Liste funktioniertworkordernum
Wert für alle Knoten, die zuvor dort waren?
Ich verstehe, man muss jedes Mal den Überblick behalten, wenn ein Knoten hinzugefügt, entfernt oder verschoben wird, was bedeutet, dass wir jedes Mal, wenn diese Methoden aufgerufen werden, eine Variable haben müssen, die den Überblick über die Anzahl behält. Wenn wir also einen Knoten in der Liste fertig haben, wäre seine Reihenfolge eins, dann fügen wir am Anfang einen weiteren hinzu. Wie würden wir die Ordnungsnummer 1 in 2 ändern und diejenige, die zu 1 hinzugefügt wird?
Oder wie funktioniert node-> next-> next-> next, wenn wir nur einen Zeiger haben? Wie würden wir dann alle drucken? Da wir a nicht benutzen könnenfor
Schleife.
Das sind also die Konzepte, die ich in Bezug auf Code nicht erfassen kann.Ich würde es sehr begrüßen, wenn Sie sich die Zeit nehmen, es zu erklären, anstatt, wenn möglich, nur den Code anzugeben. Weil ich anwenden müsste, was ich gelernt habe, um mich zu bewegen und Knoten zu löschen. Ich möchte es selbst lernen. Wenn etwas als Codebeispiel angegeben werden muss, ist das in Ordnung, aber bitte posten Sie nicht alle Antwortcodes für mich.
-Dankeschön
* Bitte verzeihen Sie eventuelle Formatfehler, da ich neu auf dieser Site bin.
Edit: Ich verstehe, ein Zeiger ist eine Adresse und das->
bezieht sich auf das "Zeigen" auf ein Mitglied. Ich meine, ich verstehe alle Grundlagen, aber mein Verständnis ist nicht fest genug, sonst könnte ich tun, womit ich Hilfe brauche.
Edit2: Ich werde versuchen, einen Kopfknoten mit verknüpfter Liste aus dem zu machen, was ich bisher gelernt habe. Ich werde die obigen Strukturen verwenden und es wird loser Code sein, nicht perfekt. Dies soll nur sicherstellen, dass ich bisher auf dem richtigen Weg bin.
int main() {
// creates a work struct to hold user content
Work *workstruct = (Work*)malloc((sizeof(struct Schedule));
// creates first node to hold a work struct for linkedlist
Node *initialNode = (Node*)malloc((sizeof(struct linkedlist));
// Method call to add work nodes to list in main
addWork(initialNode, workstruct);
}
void addWork(Node *initialNode, Work *workstruct) {
// Suppose user already initialized workstruct
// create double-pointer to make initialNode as head
Node **head = (Node **)malloc(sizeof(struct linkedlist));
// assigns user's workstruct to the workstruct of initialNode
initialNode->work = *workstruct;
// If im understanding what you have taught me so far,
// this is how you always add a node on the head
initialNode->next = *head;
*head = initialNode;
}
Das einzige Problem, das ich bisher zu haben scheint, ist, dass jedes Mal, wenn ich versuche, einen neuen Knoten zur Liste hinzuzufügen, der neue Knoten zum Kopf gemacht wird, aber der vorherige Knoten in der Liste verloren geht.