Liste chainées et concatination
legeant16
Messages postés
6
Statut
Membre
-
Sugel Messages postés 4859 Statut Membre -
Sugel Messages postés 4859 Statut Membre -
bonjour tout le monde j'ai fait un code de débutant il s'agit de créer 2 listes ensuite les concaténer.
qui peux me corriger ce bout de code (nb: 1er erreur ici : element = (element*)malloc(sizeof(element));) :)
merci d'avance
qui peux me corriger ce bout de code (nb: 1er erreur ici : element = (element*)malloc(sizeof(element));) :)
#include <stdio.h>
#include <stdlib.h>
typedef struct element element;
struct element{
int val;
struct element *nxt;
};
typedef element* llist;
element crer_element()
{
int nb;
element *element;
element = (element*)malloc(sizeof(element));
printf("Entrez un nombre à la liste : ");
scanf("%d", &nb);
element->val = nb;
element->nxt = NULL;
return element
}
l_list remplir_liste( l_list list)
{
int i=1,taille;
list *p=NULL,*q=&p
element ele;
while(i<=taille)
{
printf("Entrez le nombre d'element de la liste : ");
scanf("%d", &taille);
ele = crer_element()
- q = ele; q=&ele->nxt; i=i+1; } return list; } void afficher(l_list list){ list *tmp; tmp = &list; printf("\nvotre liste est :\n"); while (tmp != NULL){ printf("%d\n", (*tmp).val); tmp = tmp->nxt;t } }l_list* concatination( l_list* list1, l_list* list2){ if(!list1) return list2; l_list* tmp=list1; while(tmp->nxt) tmp=tmp->nxt; tmp->nxt=list2; return list1;}int main(){ l_list *list1, *list2; list1 = (l_list *)malloc(sizeof(element)); list2 = (l_list *)malloc(sizeof(element)); list1 = remplir_liste(list1); afficher(list1); list2 = remplir_liste(list2); afficher(list2); list1=concatination( list1, list2); afficher(list1); system("PAUSE"); return 0; }
merci d'avance
A voir également:
- Liste chainées et concatination
- Liste déroulante excel - Guide
- Liste code ascii - Guide
- Liste déroulante en cascade - Guide
- Site dangereux liste - Guide
- Voir liste d'amis facebook - Guide
3 réponses
Slt,
Au sujet de ta fonction
Son prototype n'est pas adapté. Il faudrait qu'elle retourne un pointeur de type element.
soit :
Cela ne parait pas net de nommer ta variable element du même nom que sa structure. On préférera donc :
;)
Au sujet de ta fonction
element crer_element():
Son prototype n'est pas adapté. Il faudrait qu'elle retourne un pointeur de type element.
soit :
element * crer_element()
Cela ne parait pas net de nommer ta variable element du même nom que sa structure. On préférera donc :
element *pElement = NULL; pElement = (element*)malloc(sizeof(*pElement));
;)
Bonjour,
Ouh là, ton code est illisible après ele = crer_element()
Peut-être est-ce parce que tu as oublié le ";" ?
De même il manque un ';' après : *q=&p
Tu as un "t" qui se balade tout seul.
Bref, avant de regarder ce qui ne va pas, revois tout ça et fais une belle indentation :-).
Note : utilise la balise "code c" pour mettre la couleur (et pas seulement "code"
Cdlt,
Ouh là, ton code est illisible après ele = crer_element()
Peut-être est-ce parce que tu as oublié le ";" ?
De même il manque un ';' après : *q=&p
Tu as un "t" qui se balade tout seul.
Bref, avant de regarder ce qui ne va pas, revois tout ça et fais une belle indentation :-).
Note : utilise la balise "code c" pour mettre la couleur (et pas seulement "code"
Cdlt,
Pas d'accord. Pourquoi devrait-il renvoyer un pointeur ? Il s'agit d'un élément, donc c'est bon.
Cela ne parait pas net de nommer ta variable element du même nom que sa structure. On préférera donc :
Yep. Encore mieux, mettre une majuscule au nom d'un type créé.
Par exemple :
Moi, je suis d'accord avec l'ami Chris:
element crer_element() // ici, le prototype stipule que doit être retourné un élément de type "element" { int nb; element *element; // on déclare la le pointeur "element" de type "* element" element = (element*)malloc(sizeof(element)); // on alloue de la mémoire et définissons le pointeur printf("Entrez un nombre à la liste : "); scanf("%d", &nb); element->val = nb; element->nxt = NULL; return element // on retourne ce pointeur, de type "*element" }Donc, la valeur retournée n'est pas du type déclaré, et le compilateur nous gratifie du message d'erreur approprié.
Cette fonction renvoie actuellement un pointeur de type element :
element crer_element() { int nb; element *element; ... return element }Le prototype n'est donc pas à jour avec le code de la fonction.
Pour autant, la valeur attendue dans le main() est bien element.
Il devrait donc plutôt faire :
element crer_element(void) { element el; return el; }Enfin, en tout cas on est d'accord. Il faut bien tout mettre en cohérence.