[c] liste simplement chainé
Résolu/Fermé
castorgris
Messages postés
2
Date d'inscription
vendredi 16 mars 2007
Statut
Membre
Dernière intervention
19 mars 2007
-
16 mars 2007 à 22:31
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 21 nov. 2007 à 22:03
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 21 nov. 2007 à 22:03
A voir également:
- [c] liste simplement chainé
- Liste déroulante excel - Guide
- Chaine tnt gratuite sur mobile - Guide
- Liste déroulante en cascade - Guide
- Nouvelle chaîne tnt gratuite 2024 - Accueil - TV & Vidéo
- Plus de chaine tv - Guide
4 réponses
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
342
17 mars 2007 à 03:21
17 mars 2007 à 03:21
void ajouteFin(liste *l,int b) /* ajoute un element en fin de liste*/ { liste *a; a=(liste *)malloc(sizeof(liste)); a->x=b; l->next=a; }
Attention, tu n'ajoutes pas un élément en fin de liste mais tu chaine *l vers ta nouvelle cellule. Pour ajouter a la fin, il faut donc avoir supposé que *l est le dernier element de ta liste... De plus aucune condition ne semble marquer la fin de liste (a.next pointe sur quoi ?).
void ajouteDebut(liste *l,int b)/* ajoute element en début de liste*/ { liste *a; a=(liste *)malloc(sizeof(liste)); a->x=b; a->next=l; l=a;/*pb */ }
En effet, l=a pose un problème. Déjà en dehors de toute interprétation algorithmique, il ne sert a rien d'affecter l à la fin de cette fonction car sa durée de vie est limitée à cette fonction. Essaie plutôt :
/** * @brief Ajoute un élément en tete de liste. * @param *l Liste a modifier. * @param b Element a ajouter * @return Adresse de la nouvelle tete */ liste* ajouterDebut(liste* l, int b);
A toi de coder la suite ;)
int main() { liste *l=NULL; l=(liste *)malloc(sizeof(liste)); printf("test"); if(l!=NULL) { l->x=1; l->next=NULL; ajouteDebut(l,4); } free(l); return 0; }
Il faut aussi liberer la cellule ajoutée !
Bon code.
castorgris
Messages postés
2
Date d'inscription
vendredi 16 mars 2007
Statut
Membre
Dernière intervention
19 mars 2007
19 mars 2007 à 07:28
19 mars 2007 à 07:28
Merci pour l'aide.
puis sinon j'ai trouvé ce site pour ceux qui ont un pb similaire
https://openclassrooms.com/fr/courses#ss_part_3
puis sinon j'ai trouvé ce site pour ceux qui ont un pb similaire
https://openclassrooms.com/fr/courses#ss_part_3
salut je t'ai fait une fonction qui ajoute ,je crois que sa va marcher
/* insertion au début de la liste */
int ins_debut_liste (Liste * liste, char *donnee){
Element *nouveau_element;
if ((nouveau_element = (Element *) malloc (sizeof (Element))) == NULL)
return -1;
if ((nouveau_element->donnee = (char *) malloc (50 * sizeof (char)))
== NULL)
return -1;
strcpy (nouveau_element->donnee, donnee);
nouveau_element->suivant = liste->debut;
liste->debut = nouveau_element;
liste->taille++;
return 0;
}
/* insertion au début de la liste */
int ins_debut_liste (Liste * liste, char *donnee){
Element *nouveau_element;
if ((nouveau_element = (Element *) malloc (sizeof (Element))) == NULL)
return -1;
if ((nouveau_element->donnee = (char *) malloc (50 * sizeof (char)))
== NULL)
return -1;
strcpy (nouveau_element->donnee, donnee);
nouveau_element->suivant = liste->debut;
liste->debut = nouveau_element;
liste->taille++;
return 0;
}
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
21 nov. 2007 à 22:03
21 nov. 2007 à 22:03
Salut,
tu peux regaarder aussi dans la FAQ CCM liste simplement chainee
tu peux regaarder aussi dans la FAQ CCM liste simplement chainee