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 hinzuworkordernumund 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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage