mercii monsieur pour vos efforts wllah ..et svp makrhtsh tjawbni 3la wahed la question : prq on a pas reserver la memoire pour le pointeur temp et seulement pour b
merci pour vos encouragements, alors le pointeur temp est utiliser seulement pour parcourir la liste pour se déplacer d'un élément à un autre par contre b et utiliser pour créer un nouvel élément dynamiquement.
@@PWH_HAIRIBI Monsieur pourquoi il faut être à l'intérieur des accolades si il est à l intérieur une fois on entre à la boucle temp->next il point sur b et on perd les prochaines valeurs de la liste Et merci d'avance
J'ai utilisé temp->next pour s'arrêter au dernier élément (temp doit pointer le dernier élément) si j'utilise just temp je vais dépasser le dernier élément temp==NULL par contre temp->next==NULL veut dire que temp pointe le dernier élément
Svp monsieur j'ai une question Est-ce que la tête c'est le début de la liste (qui contient sauf le pointeur de 1er nœud) ou bien c'est le 1et nœud de la liste (qui contient un pointeur et le data de nœud)???
La tête de la liste c'est le premier nœud Si la liste est vide on peut pas parler d'une liste car la liste n'existe pas le pointeur debut c'est juste pour repérer la liste
Bonjour Professeur, Lors de l'exécution du code que vous avez fourni pour la fonction d'ajout au début de la liste chaînée, j'ai remarqué que le résultat affiché est inverse de celui attendu. Par exemple, si l'on entre 5 éléments dans l'ordre 1, 2, 3, 4, 5, le programme affiche 5, 4, 3, 2, 1. Cependant, le résultat attendu devrait être 5, 1, 2, 3, 4, conformément à ce qui a été expliqué. Pourriez-vous clarifier ce point ou expliquer comment obtenir le résultat attendu ? Merci beaucoup pour votre aide
Non l'affichage est juste , au debut 1 etait au debut apres lorsqu'on ajoute 2 alors maintenant 2 qui est au debut apres 3 au debut ... a chaque fois , lorsqu'on fait appel a la fct elle met le nbr au debut donc au final on obtient 5 4 3 2 1
Bnj ms Dans la fonction main ( ) Dans les arguments de la fonction ajouterAlaFin Pourquoi tu n'as fais pas symbole de l'adresse avant l1 ajouterAlaFin( &l1, n ) normallmenet c'est un passage par adresse par ce que nous allons changer l1 a l'intérieur de la fonction ???!!
car en return l'element beg (l1) apres l'affecter au l1 pour avoir le mise a jour du debut de chaine et deja monsieur haribi a changer void vers Node* pour eviter ce problem. et comme recap on est pas besoin de passage par adress si la fonction return une valeur (corriger moi si mon comprehetion est erroné).
Non il faut faire temp->next=b; Car temp c'est l'adresse de l'élément encore c'est sont next qui doit pointer le b si non on va perdre l'élément encore
Merci infinénement Monsieur.
Vous etes meuilleur!!!!
lah yr7em lwalidin ,rak oustad dyal besse7 ,makrehnach ykunu balek bzzf ,lah ysser lik f7yatek
Merci pour vos encouragements
merci beaucoup Monsieur lah irhm lik l walidin f had ramadan mobark stafdt bzaff merci
شكرا سيدي الفاضل احسن ماقلتي الله يرحم الوالدين
@@PWH_HAIRIBI svp prof imta tloh lina incha alah suppression au milieu pour les liste doublement chaînées
@@elazzaouykarim9749 voici la vidéo ssi karim
th-cam.com/video/lmxxqml0IJc/w-d-xo.html
x7al w ana wa7le fhade liste chaine 3yite n9elb f les video walo ta l9it playlist dyalk lah ishel elik akhoya
جزاك الله كل الخير يا أستاذ
Merci beaucoup Monsieur, pourquoi temp-->next=b dans la boucle et non pas dehors ?
Elle est en dohors de la boucle while
La boucle while contient une seule instruction temp=temp->next;
نفس الملاحضة
Même réponse
mercii monsieur pour vos efforts wllah ..et svp makrhtsh tjawbni 3la wahed la question : prq on a pas reserver la memoire pour le pointeur temp et seulement pour b
merci pour vos encouragements, alors le pointeur temp est utiliser seulement pour parcourir la liste pour se déplacer d'un élément à un autre par contre b et utiliser pour créer un nouvel élément dynamiquement.
@@PWH_HAIRIBI merciiii monsieur vraiment sbhanllah une fois tatchre7 tanfhm bzfff dlhwayj ...continuez vous etes le meilleuuuur
si le programme ne veut pas marcher taper :
#include
#include
typedef struct box
{
int data;
struct box * next;
}box;
box * ajouterAD(box *debut, int elment) //fonction ajouter au début
{
box * b;
b = (box *)malloc(sizeof(box));
b->data = elment;
b->next = debut;
debut = b;
return debut;
}
//fontion ajouter à la fin
box * ajouterAF(box * debut, int n)
{
box * b, * temp;
b = (box *)malloc(sizeof(box));
b->data = n;
b->next = NULL;
if(debut == NULL)
{
debut = b;
}
else
{
temp = debut;
while (temp->next != NULL)
{
temp = temp->next;
}
}
temp->next = b;
return debut;
}
//fontion afficher liste
void afficheL(box *debut)
{
box * temp;
temp = debut;
if (debut == NULL)
{
printf("la liste est vide");
}
else
{
while(temp != NULL)
{
printf("%d-->", temp->data);
temp = temp->next;
}
}
}
int main()
{
box * l1 = NULL;
int n, i, nbr;
printf("donner le nombre des element du la liste
");
scanf("%d", &nbr);
for(i = 0 ; i< nbr; i++)
{
printf("donner le %d element du la liste
", i);
scanf("%d", &n);
l1 = ajouterAF(l1, n);
}
afficheL(l1);
return 0;
}
Dans la fonction ajouter à la fin le temp->next=b; doit être à l'intérieur des accolades de else
@@PWH_HAIRIBI Monsieur pourquoi il faut être à l'intérieur des accolades si il est à l intérieur une fois on entre à la boucle temp->next il point sur b et on perd les prochaines valeurs de la liste
Et merci d'avance
C'est pas à l'intérieur des accolades de while mais du else càd après la boucle
Merci beaucoup monsieur pour vos efforts , juste une petit question , c'est juste ,d'ecrire temp au lieu d'ecrire temp->next dans la boucle while .
J'ai utilisé temp->next pour s'arrêter au dernier élément (temp doit pointer le dernier élément) si j'utilise just temp je vais dépasser le dernier élément temp==NULL
par contre temp->next==NULL veut dire que temp pointe le dernier élément
@@PWH_HAIRIBI aah oui , j'ai compris monsieur , jazak laho khayran ..
Merci bcpp
Svp khasna des exercices corrigés pour chaque partie!! 😢et merci d'avance monsieur
Svp monsieur j'ai une question
Est-ce que la tête c'est le début de la liste (qui contient sauf le pointeur de 1er nœud) ou bien c'est le 1et nœud de la liste (qui contient un pointeur et le data de nœud)???
La tête de la liste c'est le premier nœud
Si la liste est vide on peut pas parler d'une liste car la liste n'existe pas le pointeur debut c'est juste pour repérer la liste
@@PWH_HAIRIBI ah, d'accord merci beaucoup monsieur
merci monsieur
choukrane bzf prof 3andi wahd lmolahada f else f fonction d ajouter machi khsna n3awdo rj3o l deubut l9ima li kayna f temp ???
Dans le else le debut ne change pas est temp egale au debut donc même si on met debut=temp c'est comme si on n'a rien fait
@@PWH_HAIRIBI chokrane bzf prof 3la tawdih 😍❤️
Monsieur déjà le debut reste le meme la fonction ne traite pas le debut alors ça va marcher meme si on a pas indiquer un type de retour (void)
La liste initialement est vide le début sera modifié lors de la l'ajout du premier élément
Bonjour Professeur,
Lors de l'exécution du code que vous avez fourni pour la fonction d'ajout au début de la liste chaînée, j'ai remarqué que le résultat affiché est inverse de celui attendu. Par exemple, si l'on entre 5 éléments dans l'ordre 1, 2, 3, 4, 5, le programme affiche 5, 4, 3, 2, 1.
Cependant, le résultat attendu devrait être 5, 1, 2, 3, 4, conformément à ce qui a été expliqué.
Pourriez-vous clarifier ce point ou expliquer comment obtenir le résultat attendu ?
Merci beaucoup pour votre aide
Non l'affichage est juste , au debut 1 etait au debut apres lorsqu'on ajoute 2 alors maintenant 2 qui est au debut apres 3 au debut ... a chaque fois , lorsqu'on fait appel a la fct elle met le nbr au debut donc au final on obtient 5 4 3 2 1
bonjour monsieur svp pourquoi mon programme ne veut pas marcher
#include
typedef struct box {
int data ;
struct box * next;
}box;
box *ajouterAlafin(box*debut,int elm )
{ box*b,*temp;
b=(box*)malloc(sizeof(box));
b->data=elm;
b->next=NULL;
if(debut=NULL) debut=b;
else
{ temp=debut;
while(temp->next!=NULL)
temp=temp->next;
temp->next=b;
}
return debut;
}
void afficherListe(box*debut)
{ box*temp;
temp=debut;
if(debut==NULL) printf("la liste est vide");
else
{
while(temp!=NULL)
{
printf("%d-->",temp->data);
temp=temp->next;
}
}
}
int main()
{
box*l1=NULL;
int n,i,nbr;
printf("donner le nbre des element " );
scanf("%d",&nbr);
for(i=0;i
Lerreur est ici tu as écrit :
if(debut=NULL) debut =b;
Au lieu
if(debut==NULL) debut =b;
Il faut mettre ==
@@PWH_HAIRIBI merciiiii 🤦♂️
@@PWH_HAIRIBI الشكر الجزيل أستاذ على كل هذه المجهودات المبذولة، والله الإستفادة عمت الجميع.
Est ce que c possible des vidéos sur les arbres
Salut svp pourquoi il y en deux cas ici si la liste est vide ou non ??
J'ai un question svp, pourquoi le typecasting ??,ona déjà b est de type boxe*
Tu peux ne pas le mettre mais ça dépend des compilateur utilisé car malloc retourne un pointeurs void*
@@PWH_HAIRIBI merci beaucoup 👌
merci
Mercii ❤️
Vous méritez plus
ف ajouter fin ايلا درنا b هو لي pointer على الاخر و ماشي العكس .واش صحيح
s'il vous plait pouvez vous m'envoyer le programme ou l'écrire dans le commentaire pour que je puisse réviser plus
ce lundi j'ai un examen,
@@PWH_HAIRIBI mehdinouira97@gmail.com
@@PWH_HAIRIBI merci
@@mehdinouira3540 je t'ai envoyé les programmes
Merci bcp
Avec un grand plaisir
monsieur pour quoi la fonction ajouter a la fin return au debut et ne return pas temp.
Car le pointeur début fait référence à la liste
Bnj ms
Dans la fonction main ( )
Dans les arguments de la fonction ajouterAlaFin
Pourquoi tu n'as fais pas symbole de l'adresse avant l1
ajouterAlaFin( &l1, n )
normallmenet c'est un passage par adresse par ce que nous allons changer l1 a l'intérieur de la fonction
???!!
car en return l'element beg (l1) apres l'affecter au l1 pour avoir le mise a jour du debut de chaine et deja monsieur haribi a changer void vers Node* pour eviter ce problem.
et comme recap on est pas besoin de passage par adress si la fonction return une valeur (corriger moi si mon comprehetion est erroné).
merci bcpppp.
Salamo 3likoum
Monsieur wach radi t9dr dirhom incha alah b c++
merciiii bcpp
walakin kifch ndiro le passage par adresse?
Avec le double *
Box**
A min15 :12 kan momkin ndiro ri temp=b dirct ??
Non il faut faire temp->next=b;
Car temp c'est l'adresse de l'élément encore c'est sont next qui doit pointer le b si non on va perdre l'élément encore
j'taime trop ouaich
Merci bcp