A voir également:
- Remplir une liste chainée en c
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Organigramme a remplir word - Guide
- Liste code ascii - Guide
- Site dangereux liste - Guide
9 réponses
Bonjour,
Ca semble correcte, sauf que dans new_client ton p est de type node alors qu'il devrait être de type
Pour ce qui est de ton ajout en tête le retour devrait être
Pour ton affichage et ton free_list_client l'argument list devrait être de type
Ou alors concernant les "*" oublier au niveau du type "client" tu peux juste changer ton typedef pour que "client" corresponde non pas à
mais à
Cordialement,
Ca semble correcte, sauf que dans new_client ton p est de type node alors qu'il devrait être de type
client*et que tu vérifie pas le retour de ton malloc et que son type de retour devrait être
client*
Pour ce qui est de ton ajout en tête le retour devrait être
client*
Pour ton affichage et ton free_list_client l'argument list devrait être de type
client* listPuis check de pointeur null oublier dans le free.
Ou alors concernant les "*" oublier au niveau du type "client" tu peux juste changer ton typedef pour que "client" corresponde non pas à
struct list_client
mais à
struct list_client*
Cordialement,
Je n'ai pas testé ce code donc il peut contenir des erreurs.
Attention l'ajout se fait en début de Liste. Si tu veux tu peux utiliser la fonction ajout en tête si tu fait 2-3 modif.
Cordialement,
int main { /*ouverture du fichier de donnees pour lecture coordonnees client*/ FILE * fichier; fichier = fopen("D:\\Codes \\n100mos.txt", "r"); if(fichier == NULL) { printf("Impossible d'ouvrir fichier donnees .txt \n"); exit (-1); } /* Création de la liste*/ client* cl = null; client* tmp = cl; /*on commence à lire à la ligne 6: NODE_COORD_SECTION*/ for(i=0;i<6;i++) while(fgetc(fichier)!='\n'); for(i=0;i<5;i++) { tmp = malloc(sizeof(client)); if (tmp == null) { printf("Erreur malloc\n"); exit(-1); } if (fscanf(fichier, "%d %lf %lf", &(tmp->identifiant), &(tmp->abscisse), &(tmp->ordonnee))!=3) { printf("Erreur dans le format d'une ligne : ligne %d \n", i); exit(-1); } tmp->next = cl; cl = tmp; } return 0; }
Attention l'ajout se fait en début de Liste. Si tu veux tu peux utiliser la fonction ajout en tête si tu fait 2-3 modif.
Cordialement,
En fait le main que tu as écrit et que j'ai modifié fait ce que tu veux sans utiliser de fonction. Il lui faut juste ta structure client.
Si tu veux utiliser une fonction ajoutEnTete(..) Il faut soit modifier cette fonctioj pour pouvoir l'utiliser dans le main soit modifier le main pour pouvoir lui envoyer les bon arguments.
Cordialement,
Si tu veux utiliser une fonction ajoutEnTete(..) Il faut soit modifier cette fonctioj pour pouvoir l'utiliser dans le main soit modifier le main pour pouvoir lui envoyer les bon arguments.
Cordialement,
Bonjour,
Peux tu être un peu plus précis sur ton problème exactement, je veux dire sur ce que tu as déjà fait et ce que tu n'arrive pas à faire?
Cordialement,
Peux tu être un peu plus précis sur ton problème exactement, je veux dire sur ce que tu as déjà fait et ce que tu n'arrive pas à faire?
Cordialement,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voilà ce que j'ai réalisé. Je ne sais pas comment remplir tout les élements de la liste.
Merci d'avance pour vos aides.
Merci d'avance pour vos aides.
struct list_client{ int identifiant; /*definition d'un type structure nommé client*/ double abscisse; double ordonnee; int demande; /*demande du client*/ int temps_service; int borne_inf_tw; int borne_sup_tw; struct list_client *suivant; /*pointeur sur le noeud suivant*/ }; typedef struct list_client client; /*creation liste client*/ client new_client (int identifiant, double abscisse, double ordonnee, int demande, int temps_service, int borne_inf_tw, int borne_sup_tw) { node p; p = NULL; p = malloc(sizeof (liste_client)); p->identifiant = identifiant; p->abscisse = abscisse; p->ordonnee = ordonnee; p->demande = demande; p->temps_service = temps_service; p->borne_inf_tw = borne_inf_tw; p->borne_sup_tw = borne_sup_tw; p->suivant = NULL; return p; } /*ajout des elements à la liste*/ List ajouterEntete(int identifiant, double abscisse, double ordonnee, int demande, int temps_service, int borne_inf_tw, int borne_sup_tw, client *liste) { client *elem = malloc(sizeof(client)); if (NULL == elem) exit(EXIT_FAILURE); elem->identifiant = identifiant; elem->abscisse = abscisse; elem->ordonnee = ordonnee; elem->demande = demande; elem->temps_service = temps_service; elem->borne_inf_tw = borne_inf_tw; elem->borne_sup_tw = borne_sup_tw; elem->suivant = liste; return elem; } /*affichage tout les elements de la liste*/ void affiche_list_client (client list) { if(list != NULL) { do { printf(" (%d)(%lf)(%lf)(%d)(%d)(%d)(%d)\n", list->identifiant,list->abscisse,list->ordonnee, list->demande,list->temps_service, list->borne_inf_tw, list->borne_sup_tw); list = list->suivant; }while(list->suivant != NULL); } } /* libère la mémoire de toute la chaîne * par une fonction récursive. */ void free_list_client(client list) { while(list->suivant != NULL) { list = list->suivant; free_list_client(list); free(list); } }
Je n'ai pas compris l'histoire de pointeur comme argument dans la fonction affiche_list_client et free list_client?
Je n'ai pas encore récu une réponse par rapport à ma première question: écrire une fonction qui permet de remplir les élements de la liste à partir d'un fichier de donnée??
Merci.
Je n'ai pas encore récu une réponse par rapport à ma première question: écrire une fonction qui permet de remplir les élements de la liste à partir d'un fichier de donnée??
Merci.
J'ai ce petit bout de code qui permet de remplir les élements d'une structure. Comment faire pour remplir les élements d'une liste chainée?
int main { /*ouverture du fichier de donnees pour lecture coordonnees client*/ FILE * fichier; fichier = fopen("D:\\Codes \\n100mos.txt", "r"); if(fichier == NULL) { printf("Impossible d'ouvrir fichier donnees .txt \n"); exit (-1); } /*on commence à lire à la ligne 6: NODE_COORD_SECTION*/ for(i=0;i<6;i++) while(fgetc(fichier)!='\n'); for(i=0;i<5;i++) if (fscanf(fichier, "%d %lf %lf", &(client[i].identifiant), &(client[i].abscisse), &(client[i].ordonnee))!=3) { printf("Erreur dans le format d'une ligne : ligne %d \n", i); exit(-1); return 0; }
Comment devient la fonction ajouterEntete si on voudrais lire les données sur les élements du fichier?
??
/*ajout des elements à la liste*/ List ajouter(int identifiant, double abscisse, double ordonnee, int demande, int temps_service, int borne_inf_tw, int borne_sup_tw, client *liste) { client* elem = malloc(sizeof(client)); if (elem == NULL) exit(EXIT_FAILURE); /*ouverture du fichier de donnees pour lecture identifiant & coordonnees client*/ FILE * fichier; fichier = fopen("D:\\Codes\\n100mos.txt", "r"); if(fichier == NULL) { printf("Impossible d'ouvrir fichier donnees .txt \n"); exit (-1); } client* cl = null; client* tmp = cl; /*on commence à lire à la ligne 6: NODE_COORD_SECTION*/ for(i=0;i<6;i++) while(fgetc(fichier)!='\n'); for(i=0;i<5;i++) { tmp = malloc(sizeof(client)); if (tmp == null) { printf("Erreur malloc\n"); exit(-1); } if (fscanf(fichier, "%d %lf %lf", &(tmp->identifiant), &(tmp->abscisse), &(tmp->ordonnee))!=3) { printf("Erreur dans le format d'une ligne : ligne %d \n", i); exit(-1); } tmp->next = cl; cl = tmp; } elem->identifiant = identifiant; elem->abscisse = abscisse; elem->ordonnee = ordonnee; elem->demande = demande; elem->temps_service = temps_service; elem->borne_inf_tw = borne_inf_tw; elem->borne_sup_tw = borne_sup_tw; elem->suivant = liste; return elem; }
??
Là il me renvoie les erreurs suivantes :
C:\Documents and Settings\admin\Bureau\Mon algo\main.c|110|error: request for member 'identifiant' in something not a structure or union|
C:\Documents and Settings\admin\Bureau\Mon algo\main.c|110|error: request for member 'abscisse' in something not a structure or union|
C:\Documents and Settings\admin\Bureau\Mon algo\main.c|110|error: request for member 'ordonnee' in something not a structure or union|
C:\Documents and Settings\admin\Bureau\Mon algo\main.c|115|error: request for member 'next' in something not a structure or union|
Comment régler ça?
Merci
C:\Documents and Settings\admin\Bureau\Mon algo\main.c|110|error: request for member 'identifiant' in something not a structure or union|
C:\Documents and Settings\admin\Bureau\Mon algo\main.c|110|error: request for member 'abscisse' in something not a structure or union|
C:\Documents and Settings\admin\Bureau\Mon algo\main.c|110|error: request for member 'ordonnee' in something not a structure or union|
C:\Documents and Settings\admin\Bureau\Mon algo\main.c|115|error: request for member 'next' in something not a structure or union|
Comment régler ça?
Merci
Bonjour,
En fait, je suis au début de l'implméntation.
J'ai deux questions qui me tringue l'esprit là:
1. Qu'est ce que c'est la liste chainée circulaire? Quelle est la différence de cette liste avec celle de doublement chainée? Pourriez-vous me l'expliquer à l'aide d'un exemple?Peut-on dire par exemple que cette liste 0 1230 est une liste circulair?
2.Comment allouer dynamiquement un tableau de liste chainée?
Merci par avance de votre aide.
Cordialement
En fait, je suis au début de l'implméntation.
J'ai deux questions qui me tringue l'esprit là:
1. Qu'est ce que c'est la liste chainée circulaire? Quelle est la différence de cette liste avec celle de doublement chainée? Pourriez-vous me l'expliquer à l'aide d'un exemple?Peut-on dire par exemple que cette liste 0 1230 est une liste circulair?
2.Comment allouer dynamiquement un tableau de liste chainée?
Merci par avance de votre aide.
Cordialement
Bonjour,
Alors une liste chainée circulaire est une liste chainée (une suite de maillons) dont le dernier pointe sur le premier. (au lieu de pointer sur null pour une liste normal)
Une liste doublement chainée est une liste qui contient en plus d'un pointeur next, un pointeur prev qui lui pointe sur le maillon précédent.
Une liste doublement chainée peut être circulaire ou non.
On allout pas dynamiquement un tableau de liste chainée, on allout un maillon qu'on chaine avec d'autre maillon, ce qui rend la liste chainée extensible et qui permet des insersions d'éléments rapides.
https://www.commentcamarche.net/contents/114-langage-c-les-listes-chainees
Cordialement,
Alors une liste chainée circulaire est une liste chainée (une suite de maillons) dont le dernier pointe sur le premier. (au lieu de pointer sur null pour une liste normal)
Une liste doublement chainée est une liste qui contient en plus d'un pointeur next, un pointeur prev qui lui pointe sur le maillon précédent.
Une liste doublement chainée peut être circulaire ou non.
On allout pas dynamiquement un tableau de liste chainée, on allout un maillon qu'on chaine avec d'autre maillon, ce qui rend la liste chainée extensible et qui permet des insersions d'éléments rapides.
https://www.commentcamarche.net/contents/114-langage-c-les-listes-chainees
Cordialement,