Page 1 sur 1

[Tuto] les listes chainées

Publié : lun. 10/juil./2017 9:04
par Zorro
Tonio a écrit :j'ai du mal avec les listes chainées et structures en faites .
une liste chainée c'est en fait une pile d'assiettes !!
c'est juste une façon de stocker des valeurs (nombre ou chaine) ....

tu poses dedans une valeur , et la suivante va s’empiler par dessus

on creer notre pile d'assiettes (notre liste chaînée ) de cette façon

ici je creer une liste qui va s'appeler "ma_liste.s"

Code : Tout sélectionner

newlist ma_liste.s()
pour le moment elle est vide !

ensuite on va poser un premier élément , une chaine , dedans
on previens le compilo de notre volonté d'ajouter une chaine dans notre liste de cette façon :

Code : Tout sélectionner

AddElement(ma_Liste.s()) ; on decide d'ajouter un element dans la liste (on ajoute une assiette )
et maintenant que le compilo est prevenu , on ajoute effectivement notre chaine dans la liste , (le compilo attends .. )

Code : Tout sélectionner

ma_liste.s() = "assiette numero 1" ; voila notre chaine "assiette numero 1" est ajoutée dans la liste
on va ajouter une deuxieme "assiette" (une deuxieme valeur )

donc on previens le compilo qu'on veux encore ajouter une valeur (une chaine ici ) dans la liste (on ajoute sur la pile .. car une liste est un empilement )

Code : Tout sélectionner

AddElement(ma_Liste.s()) ; on decide d'ajouter un element dans la liste (on ajoute une assiette )
ma_liste.s() = "assiette numero 2"
donc au total voici le code complet qu'on viens de faire :

Code : Tout sélectionner

Newlist ma_liste.s()

AddElement(ma_Liste.s()) ; on decide d'jouter un element dans la liste (on ajoute une assiette )
ma_liste.s() = "assiette numero 1"

AddElement(ma_Liste.s()) ; on decide d'jouter un element dans la liste (on ajoute une assiette )
ma_liste.s() = "assiette numero 2"


si maintenant on veux lire le contenu de notre liste (de notre pile d'assiettes)
voici comme on fait :

soit on lit la totalité de notre liste ainsi :

Code : Tout sélectionner

ForEach Ma_Liste() ; ça va lire TOUTE les valeurs contenue dans notre liste
		Debug Ma_Liste() ; et ça affiche au fur et a mesure de la lecture
Next
soit on peut accéder a un élément en particulier ... mais .... il faut savoir que le premier element d'une liste commence a 0 pas a 1 !!

donc :

Code : Tout sélectionner

SelectElement(Ma_Liste(), 1) ; ici on demande au pointeur d'element de la liste de se mettre sur le 2em element de la liste (ici 1 parceque le premier element d'une liste a le numero 0 )
debug  "ceci est le deuxieme element de ma_liste() : "+ Ma_Liste() ; affichage de l'element numero  2
si on veux acceder a l'element numero 1
il suffit de faire :

Code : Tout sélectionner

SelectElement(Ma_Liste(), 0) ; ici on demande au pointeur d'element de la liste de se mettre sur le 2em element de la liste (ici 1 parceque le premier element d'une liste a le numero 0 )
debug  "ceci est le Premier element de ma_liste() : "+ Ma_Liste() 


voila , il existe ensuite des fonctions (voir la doc ) pour effacer tout le contenu de la liste , ou bien seulement un élément
on peut aussi trier une liste ,copier une liste etc .....
une liste est semblable a une pile d'assiette ou bien a une "Liste" de course , ou de contact d'un carnet d'adresse par exemple etc ...

voici le code au complet :

Code : Tout sélectionner


calldebugger
Newlist ma_liste.s()

AddElement(ma_Liste.s()) ; on décide d'ajouter un élément dans la liste (on ajoute une assiette )
ma_liste.s() = "assiette numero 1"

AddElement(ma_Liste.s()) ; on décide d'ajouter un élément dans la liste (on ajoute une assiette )
ma_liste.s() = "assiette numero 2"


ForEach Ma_Liste()
		Debug Ma_Liste()
Next

debug "*************************"

SelectElement(Ma_Liste(), 1) ; ici on demande au pointeur d’élément de la liste de se mettre sur le 2em élément de la liste (ici 1 parce que le premier élément d'une liste a le numero 0 )
debug  "ceci est le deuxieme élément de ma_liste() : "+ Ma_Liste()

SelectElement(Ma_Liste(), 0) ; ici on demande au pointeur d’élément de la liste de se mettre sur le 2em élément de la liste (ici 0 parce que le premier élément d'une liste a le numero 0 )
debug  "ceci est le Premier element de ma_liste() : "+ Ma_Liste()


Re: [Tuto] les listes chainées

Publié : lun. 10/juil./2017 10:06
par Tonio
Un grand merci pour ton ton tuto Zorro

Re: [Tuto] les listes chainées

Publié : lun. 10/juil./2017 10:10
par falsam
Tonio a écrit :Un grand merci pour ton ton tuto Zorro
Les affaires reprennent dans ce cas :mrgreen:

Re: [Tuto] les listes chainées

Publié : lun. 10/juil./2017 10:16
par Tonio
falsam a écrit :
Tonio a écrit :Un grand merci pour ton ton tuto Zorro
Les affaires reprennent dans ce cas :mrgreen:
Petite question

je confond les tableaux et les liste chainées c'est quoi la difference svp merci

Re: [Tuto] les listes chainées

Publié : lun. 10/juil./2017 10:18
par falsam
Tonio a écrit :je confond les tableaux et les liste chainées c'est quoi la difference svp merci
Efficace le tuto ....

Re: [Tuto] les listes chainées

Publié : lun. 10/juil./2017 10:28
par SPH
Tonio a écrit :
falsam a écrit :
Tonio a écrit :Un grand merci pour ton ton tuto Zorro
Les affaires reprennent dans ce cas :mrgreen:
Petite question

je confond les tableaux et les liste chainées c'est quoi la difference svp merci
Les tableaux, c'est a l'ecole si tu veux. Les chainées, c'est en hiver :wink:

Re: [Tuto] les listes chainées

Publié : lun. 10/juil./2017 13:06
par microdevweb
@Tonio,

Les tableaux:

Les tableaux doivent être dimensionnés avant leurs utilisation et peuvent être éventuellement redimensionnés (une commande spécifique est envoyée à l'os qui lui demande de ré alloué la mémoire réservé au tableaux ) en générale on les utilise pour un même type de variable et le plus souvent lorsque l'on en connait d'avance le nombre.

Les données d'un tableaux sont stocké l'une à la suite des autres en mémoire.
A titre d'exemple dans beaucoup de langages il n'existe pas de chaîne de caractères qui doivent être manipulées par tableaux.

Les listes chaînées:

La gestion des listes chaînées est vraiment simple avec PureBasic en langage C ou autres c'est une autre histoire.

Les données d'une liste sont ajoutée à la volée est peuvent être à n'importe quel adresse mémoire (c'est l'os qui gère cela)

Cela est totalement transparent en Purebasic mais chaque élément d'une liste et cela même s'il ne s'agis que par exemple d'une liste d'entier est composé d'une structure qui en plus (dans le cas de mon exemple) des 32 bits nécessaire au stockage de l'entier comprend deux pointeurs un qui pointe sur l'élément précédent tandis que l'autre pointe sur le l'élément suivant ou -1 s'il s'agis du dernier élément. En plus un pointeur unique indique le premier élément de la liste.

On comprend mieux maintenant le nom "liste chaînée", heureusement Pb comprend toutes les fonctions pour parcourir la liste alors que pour la plus part des autres langages cela doit être programmer.

On utilisera donc plus volontiers les listes pour une gestion dynamique ce qui sera le cas lorsque l'on ne connait pas d'avance le nombre d'élément de la liste.

Voila j'espère avoir peu t'éclairer sur la différence entre une tableau et une liste.

Re: [Tuto] les listes chainées

Publié : lun. 10/juil./2017 13:09
par Tonio
microdevweb Merci Beaucoup