[Tuto] les listes chainées

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

[Tuto] les listes chainées

Message 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()

Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

Re: [Tuto] les listes chainées

Message par Tonio »

Un grand merci pour ton ton tuto Zorro
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Tuto] les listes chainées

Message par falsam »

Tonio a écrit :Un grand merci pour ton ton tuto Zorro
Les affaires reprennent dans ce cas :mrgreen:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

Re: [Tuto] les listes chainées

Message 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
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Tuto] les listes chainées

Message par falsam »

Tonio a écrit :je confond les tableaux et les liste chainées c'est quoi la difference svp merci
Efficace le tuto ....
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4723
Inscription : mer. 09/nov./2005 9:53

Re: [Tuto] les listes chainées

Message 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:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: [Tuto] les listes chainées

Message 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.
Dernière modification par microdevweb le lun. 10/juil./2017 13:09, modifié 1 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

Re: [Tuto] les listes chainées

Message par Tonio »

microdevweb Merci Beaucoup
Répondre