Langage c utilisation des pointeurs

darkjedi1024 Messages postés 12 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 avril 2007 - 16 avril 2007 à 17:59
darkjedi1024 Messages postés 12 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 avril 2007 - 24 avril 2007 à 11:47
Bonjour.
Quel est le code à créer à partir de pointeurs de pointeurs pour une fonction permettant d'ajouter des éléments dans une liste chaînée sachant que la liste où on désire ajouter des éléments est défini ainsi :

typedef struct cell {
 D1 *lieu;
 D2 *temps;
 double val; 
 struct cell *ptr_suiv;
} F;

et que le type D1 est :

typedef struct lieu {
 char magasin[20];
 struct lieu *ptr_suiv;
} D1;

et D2 :

typedef struct temps {
 char date[12];
 struct temps *ptr_suiv;
} D2;

Merci.

4 réponses

julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
17 avril 2007 à 00:06
Pourquoi les structures D1 et D2 contiennent un pointeur sur l'élement suivant de la liste chainée (enfin j'imagine ...) alors que ta structure F qui "englobent" les structures D1 et D2 contient déjà un pointeur vers l'élement suivant de la liste ?

Bref, tu fais ce que tu veux :')

void AjouterEntete(F **list, D1 *d1, D2 *d2, double value)
{
    F *nouvelElement = new F;
    nouvelElement->lieu = d1;
    nouvelElement->temps = d2;
    nouvelElement->val = value;
    nouvelElement->ptr_suiv = *list;
   
    *list = nouvelElement;
}

Je crois que ce code marche (ajout d'un élement en tete), à vérifier.
0
darkjedi1024 Messages postés 12 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 avril 2007
17 avril 2007 à 19:09
Les structures D1 et D2 contiennent des pointeurs car la solution du problème a été défini ainsi.
Au départ j'avais pensé à une fonction du type

//fonction d'ajout d'un fait dans la liste

/* void ajoutFait(F **tete, double val, D1 **date, D2 **lieu){

//déclaration des variables

F* cour;

cour=(F*) malloc(sizeof(F));

cour->temps = D1;

cour->lieu = D2;

strcpy(cour->val,val);

cour->suiv = *tete;

*tete = cour;

} */

Le problème est que cela ne fonctionne pas car il y a une erreur quelquepart (vu que je débute, je suis un peu bloqué).
Merci pour ton aide
Autre petite précision, les structures D1 et D2 sont des listes permettant de modéliser les deux dimensions de la liste des faits. De façon plus pratique, on pourrait penser à un tableau à deux dimensions pour traiter les faits.
0
darkjedi1024 Messages postés 12 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 avril 2007
18 avril 2007 à 10:26
Voici le code que j'ai finalement pu utiliser (il ajoute en tête de liste).

//fonction d'ajout d'un fait dans la liste

void AjoutFait(F **list, D1 *dim1, D2 *dim2, double valeur){

    //déclaration des variables

    F *cour = malloc(sizeof(F));

   

    //affectation des valeurs

    cour->lieu = dim1;

    cour->temps = dim2;

    cour->val = valeur;

    cour->ptr_suiv = *list;

    *list = cour;

}
0
darkjedi1024 Messages postés 12 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 avril 2007
24 avril 2007 à 11:47
Voici le code retenu pour l'ajout. On a fait une modication sur le type de la variable val car on a eu des problèmes avec l'affichage.

//fonction d'ajout d'un fait dans la liste
void ajoutFait(F **tete, float val, D1 *lieu, D2 *date){
 //declaration des variables
 F* cour;



 cour=(F*) malloc(sizeof(F));
 cour->lieu = lieu;
 cour->temps = date;
 cour->val = val;
 cour->ptr_suiv = *tete;
 *tete = cour;
}
0
Rejoignez-nous