La création et la Compréhension des listes liées à des structures en C

J'ai du mal à saisir les concepts de struct et de la liste liée structure de données ensemble. Par exemple, disons que nous avons pour avoir ce code: un struct qui a un travailleur ayant un contenu et une liste liée de ces structures qui contient des nœuds de chaque travailleur et un pointeur vers le nœud suivant(?).

    typedef struct Schedule {
        char name[10];
        char description[10];
        int hours;
        int workordernum;
    } Work;

    typedef struct linkedlist {
        struct Schedule work;
        struct linkedlist *next;
    } Node;

Le problème est de savoir comment vous faire une méthode qui ajoute toujours un nœud dans le début de la liste, une méthode qui ajoute n'importe où(au milieu) dans la liste à l'aide définis par l'utilisateur workordernum, et une méthode qui met toujours à la fin.

Je ne suis pas tout à fait comprendre -> et * usages correctement. J'ai lu en ligne sur la création de la tête et la queue des nœuds, mais je n'ai pas très bien son utilisation correctement, car ils avaient un struct pour une liste et une struct pour un nœud.

Une autre chose que je n'avais pas obtenir de l'est, permet de dire que l'ajout d'un nœud au début de la liste des œuvres, comment allez-vous alors change à chaque workordernum de la valeur pour tous les nœuds qui ont été précédemment?

Je comprends que l'on doit garder la trace de chaque fois qu'un nœud est ajouté, supprimé ou déplacé, ce qui signifie que chaque fois que ces méthodes sont appelées nous devons avoir une variable qui garde la trace du nombre. Donc, si nous avons un nœud dans la liste de tous les prêts, de sa commande serait l'un, puis nous ajoutons une autre pour le début, comment ferions-nous pour changer le numéro d'ordre de 1 à 2 et celui d'être ajouté à 1?

Ou comment node->next->next->suivant les travaux si nous n'avons qu'un pointeur? Alors, comment pourrions-nous l'impression de tous d'entre eux? Puisque nous ne pouvons pas utiliser un for boucle.

Ce sont donc ces concepts, je ne peux pas saisir le code sage. Je voudrais bien vouloir reconnaissants si vous prenez votre temps pour l'expliquer plutôt que de simplement donner le code, si possible. Parce que j'aurais à appliquer ce que j'ai à apprendre à se déplacer et supprimer des nœuds. Je veux apprendre sur mon propre. Si quelque chose doit être donné comme un exemple de code alors que c'est bien, mais s'il te plaît, ne postez pas de tous les codes de réponse pour moi.

-Merci

*Veuillez pardonner les erreurs de format depuis que je suis nouveau sur ce site.

Edit: je comprends un pointeur est une adresse et que -> se rapporte à "pointant" un membre. Je veux dire, je comprends toutes les bases, mais ma compréhension n'est pas assez ferme que j'ai pu faire ce que j'ai besoin d'aide.

Edit2: je vais essayer de faire un nœud de tête associé à la liste de ce que j'ai appris jusqu'à présent. Je vais être en utilisant les structures ci-dessus et il sera lâche le code, il n'est pas parfait. C'est juste pour s'assurer que je suis sur la bonne voie jusqu'à présent.

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;
}

La seule question que je semble avoir jusqu'à présent est que chaque fois que j'essaie d'ajouter un nouveau nœud à la liste, il fait le nouveau nœud de la tête mais perd le nœud précédent qui était dans la liste.

je ne suis pas tout à fait comprendre -> et * usages correctement. Vous devriez commencer avec la bonne base avant d'essayer pour les plus avancés, concept.
D'accord, cela semble très proche de "veuillez m'apprendre tous sur les listes liées", qui, en dehors de ne pas être une question appropriée pour un Débordement de Pile va être difficile si vous n'avez pas réussi à maîtriser de base de la syntaxe de pointeur encore.
Cette tutoriel sur les pointeurs et tel de C est datée (c'est à dire, pas jusqu'à la dernière norme, ni de machines et d'outils), mais il vaut la peine de toute façon. Non, il n'y a pas de route royale pour apprendre ce qui vous prendra quelques semaines d'efforts soutenus.
obtenez ce livre : Apress Sujets Avancés en C, c'est une bonne référence pour les structures de Données et des pointeurs, vous avez manqué beaucoup de sorte que vous besoin d'une référence, non seulement une réponse à votre question
Merci, j'ai déjà vérifié que tutoriel. Merci de me faire confiance quand je dis, je ne comprends PLUS comment pointeurs de travail.

OriginalL'auteur user3570478 | 2014-04-24