Fonctions de listes chainees en c

loftiteau Messages postés 20 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 31 juillet 2012 - 10 avril 2009 à 18:52
loftiteau Messages postés 20 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 31 juillet 2012 - 12 avril 2009 à 00:43
bonjour

je souhaite avoir d'aide pour faire des fonctions d'ajout et suppression et modification en utilisant la liste chainé suivante en language c :

struct Date{
    int jour;
    int mois;
    int annee;
};
typedef struct Date Date;
struct cellule_client{
    int Id_client;
    char Nom[50];
    char Prenom[30];
    struct Date date_1ere_reservation;
    unsigned long Num_tel;
    struct cellule*suivant;
};
typedef struct cellule_client cellule_client;
struct liste_client{
    cellule_client*tete;
    cellule_client*queue;
};
typedef struct liste_client liste_client;

Merci d'avence

<h5 align="right">MLS

14 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
10 avril 2009 à 19:47
Si tu bloques sur quelque chose, dis le, mais là, tu ne poses pas de question. On dirait que tu nous demandes de faire ton boulot.

Commence par poster ce que tu as fait, et les points de ton code qui ne fonctionne pas, on pourra alors te filer un coup de main.
0
loftiteau Messages postés 20 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 31 juillet 2012
11 avril 2009 à 14:15
Bonjour

merci pour votre attention
voila mon code:

liste_avion Ajout_a_liste_avion(liste_avion* l,cellule_avion* c){
    liste_avion e;
    if (l->tete==NULL){
        l->tete=c;
        l->queue=c;
    }else{
        e=(liste_avion)malloc(sizeof(liste_avion));
        e->tete=c;|
        cellule*suivant=l.tete;
        l*tete=e*tete;
        free(e);
        return(l);
    };
};
liste_avion* Saisie_nouvel_avion(liste_avion l){
    cellule_avion* c;
    printf("veuillez remplir les champs suivants :\n\n");
    printf("Identifiant de l'avion :\t");
    scanf("%d",&(c->Id_avion));
    printf("Capacite en classe economique :\t");
    scanf("%d",&(c->capacite_c_eco));
    printf("Capacite en classe affaire :\t");
    scanf("%d",&(c->capacite_c_aff));
    l=Ajout_a_liste_avion(l,c);
    return(l);
};

<h5 align="right">MLS
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 avril 2009 à 16:35
Il n'y a pas de rapport entre la définition de structure (qui comportait déjà des erreurs) et ce que tu viens de poster (qui contient un nombre important d'erreur). As-tu seulement essayé de compiler ton code ?
Avec le peu d'information que tu donnes:

liste_avion* creer_cellule(cellule_client* client)
{
  liste_avion* liste = malloc(1 * sizeof (liste_avion);
  liste->tete = liste;
  liste->queue = liste;
  return liste;
}

liste_avion* Ajout_a_liste_avion(liste_avion* l, cellule_avion* c)
{
  liste_avion* e = creer_cellule(c);
  e->suivant = l;
  return e;
}
0
loftiteau Messages postés 20 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 31 juillet 2012
11 avril 2009 à 18:17
Voila la déclaration et les fonctions correspondantes:

struct cellule_vol{
    int Num_vol;
    struct Date date_depart;
    struct Heure heure_depart;
    struct Date date_arrivee;
    struct Heure heure_arrivee;
    long M_Tot_HT;
    char Taxe;
    char Remise;
    int Identifiant_avion;
    struct cellule*suivant;
};
typedef struct cellule_vol cellule_vol;
struct liste_vol{
    cellule_vol*tete;
    cellule_vol*queue;
};
typedef struct liste_vol liste_vol;

et voila mes fonctions:

liste_avion Ajout_a_liste_avion(liste_avion* l,cellule_avion* c){
    liste_avion e;
    if (l->tete==NULL){
        l->tete=c;
        l->queue=c;
    }else{
        e=(liste_avion)malloc(sizeof(liste_avion));
        e->tete=c;|
        cellule*suivant=l.tete;
        l*tete=e*tete;
        free(e);
        return(l);
    };
};
liste_avion* Saisie_nouvel_avion(liste_avion l){
    cellule_avion* c;
    printf("veuillez remplir les champs suivants :\n\n");
    printf("Identifiant de l'avion :\t");
    scanf("%d",&(c->Id_avion));
    printf("Capacite en classe economique :\t");
    scanf("%d",&(c->capacite_c_eco));
    printf("Capacite en classe affaire :\t");
    scanf("%d",&(c->capacite_c_aff));
    l=Ajout_a_liste_avion(l,c);
    return(l);
};

le but est de remplir les champs d'un nouveau vol puis l'ajouter à la liste des vols.est-ce que ça marche?

merci pour votre aide;

<h5 align="right">MLS
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 avril 2009 à 18:22
Tu définis cellule_vol et liste_vol, mais tu utilises liste_avion et cellule_avion. Ca n'as pas de sens.
Non, ça ne peut pas fonctionner, qui plus est, si tu veux savoir si ça fonctionne, compile et teste le.
0
loftiteau Messages postés 20 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 31 juillet 2012
11 avril 2009 à 19:47
j'essaie bien sur d'exécuter mais je trouve des erreurs concernant les affectation": cannot convert from 'cellule_avion *' to 'liste_avion *"

voila le code:

struct cellule_avion{
    int Id_avion;
    int capacite_c_eco;
    int capacite_c_aff;
    struct cellule*suivant;
};
typedef struct cellule_avion cellule_avion;
struct liste_avion{
    liste_avion* tete;
    liste_avion* queue;
};
typedef struct liste_avion liste_avion;

liste_avion Ajout_a_liste_avion(liste_avion* l,cellule_avion* c){
    liste_avion e;
    if (l->tete==NULL){
        l->tete=c;
        l->queue=c;
    }else{
        e=(liste_avion)malloc(sizeof(liste_avion));
        e->tete=c;|
        cellule*suivant=l.tete;
        l*tete=e*tete;
        free(e);
        return(l);
    };
};
liste_avion* Saisie_nouvel_avion(liste_avion l){
    cellule_avion* c;
    printf("veuillez remplir les champs suivants :\n\n");
    printf("Identifiant de l'avion :\t");
    scanf("%d",&(c->Id_avion));
    printf("Capacite en classe economique :\t");
    scanf("%d",&(c->capacite_c_eco));
    printf("Capacite en classe affaire :\t");
    scanf("%d",&(c->capacite_c_aff));
    l=Ajout_a_liste_avion(l,c);
    return(l);
};

merci bien
<h5 align="right">MLS
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 avril 2009 à 21:03
Il manque encore des choses:
- Qu'est censé faire la fonction Ajout_a_liste_avion ? Ajout en tête, ajout en queue ?
- Que représente cellule_avion ?
- Que représente liste_avion ?

Je suppose que cellule_avion est une liste chainée et liste_avion une information "sentinelle". Dans ce cas, quelle intérêt d'ajouter un élément à liste_avion ?
0
loftiteau Messages postés 20 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 31 juillet 2012
11 avril 2009 à 22:46
cellule_avion est une stucrure de liste simplement chainnes, qui contient des informations concernant l'avion;
liste_avion est une structure de liste chainee sous forme de file avec tete qui pointe sur la 1ere avion et queue qui pointe sur la dernière avion,

alors on saisie les information concernant la nouvellle avion dans une cellule puis on ajoute l'avion à la liste des avion dans la base;

tu peux m'aider stp?

<h5 align="right">MLS
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 avril 2009 à 23:14
Tu es sur que liste_avion est une liste chaînée ? Ce n'est pas logique. Pourquoi avoir deux listes chaînées ?
0
loftiteau Messages postés 20 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 31 juillet 2012
12 avril 2009 à 00:00
mon probleme est de faire des fontion d'ajout,etc avec la declaration de liste chainee suivante:

struct cellule_vol{
    int Num_vol;
    struct Date date_depart;
    struct Heure heure_depart;
    struct Date date_arrivee;
    struct Heure heure_arrivee;
    long M_Tot_HT;
    char Taxe;
    char Remise;
    int Identifiant_avion;
    struct cellule*suivant;
};
typedef struct cellule_vol cellule_vol;
struct liste_vol{
    cellule_vol*tete;
    cellule_vol*queue;
};
typedef struct liste_vol liste_vol;

mais ma solution  ne marche plus!stp
<h5 align="right">MLS
0
loftiteau Messages postés 20 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 31 juillet 2012
12 avril 2009 à 00:17
Pour ta question; il s'agit d'une seule liste chainee qu'on l'à ajouter un pointeur sur la 1 ere cellule et la dernière cellule;
tu m'a compris?

<h5 align="right">MLS
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
12 avril 2009 à 00:19
Je ne peux pas t'aider si tu n'es pas capable de me dire ce que tu cherches à faire précisement. Ce qui est compris clairement, s'énonce clairement. Tu es beaucoup trop vague.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
12 avril 2009 à 00:20
Donc on a, si j'ai bien compris: une liste chaînée et une sentinelle.
L'ajout est en tête, en queue, par insertion ?
0
loftiteau Messages postés 20 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 31 juillet 2012
12 avril 2009 à 00:43
c'est un exemple de liste chainee

<h5 align="right">MLS
0
Rejoignez-nous