Code : Tout sélectionner
Structure liste
nom.s
*suivant.liste
EndStructure
*Debut.liste=AllocateMemory(SizeOf(liste))
*nouveau=AllocateMemory(SizeOf(liste))
*Debut\*suivant=*nouveau

Code : Tout sélectionner
Structure liste
nom.s
*suivant.liste
EndStructure
*Debut.liste=AllocateMemory(SizeOf(liste))
*nouveau=AllocateMemory(SizeOf(liste))
*Debut\*suivant=*nouveau
Code : Tout sélectionner
Structure liste
nom.s
suivant.liste
EndStructure
*Debut.liste=AllocateMemory(SizeOf(liste))
*nouveau=AllocateMemory(SizeOf(liste))
*Debut\suivant=*nouveau
Pas d'accord:Le Soldat Inconnu a écrit :oui car le * est purement décoratif, ça marche très bien sans (enfin moi je l'utilise jamais quand je gère de la mémoire)
Code : Tout sélectionner
Structure liste
nom.s
*suivant.liste
EndStructure
Code : Tout sélectionner
Structure liste
nom.s
suivant.liste
EndStructure
---------------------------
PureBasic
---------------------------
Ligne3: Can't do it, else endless recursivity
---------------------------
OK
---------------------------
Code : Tout sélectionner
Programmeurs expérimentés seulement:
La valeur renvoyée par cette commande est un pointeur vers le nouvel élément. La structure de chaque élément est définie comme ceci:
Structure Element
*Next.Element ; Pointeur vers l'élément suivant de la liste ou zéro si c'est le dernier élément
*Previous.Element ; Pointeur vers l'élément précédent de la liste ou zéro si c'est le premier élément
; La structure utilisée par la liste suit directement ces 2 variables (ce qui implique que les
; données utilisateurs se situent à l'addresse du nouvel élément + 8 octets.
EndStructure
Code : Tout sélectionner
Structure liste
nom.s
encours.l
suivant.l
precedent.l
EndStructure
; Premier element
Element1.liste
Element1\nom = "truc"
Element1\encours = @Element1
Element2.liste
Element2\nom = "bidule"
Element1\suivant = @Element2
Element2\precedent = @Element1
Element2\encours = @Element2
Element3.liste
Element3\nom = "chouette"
Element2\suivant = @Element3
Element3\precedent = @Element2
Element3\encours = @Element3
; on se place sur l'élément 1
CopyMemory(@Element1.liste, @Element.liste, SizeOf(liste))
; on affiche le texte
Debug Element\nom
; on se place sur l'élément 2
CopyMemory(Element\suivant, @Element.liste, SizeOf(liste))
; on affiche le texte
Debug Element\nom
; on change le texte de l'élément 2
Element\nom = "nouveau"
CopyMemory(@Element, Element\encours, SizeOf(liste))
; on se place sur l'élément 3
CopyMemory(Element\suivant, @Element.liste, SizeOf(liste))
; on affiche le texte
Debug Element\nom
; on se place sur l'élément 2
CopyMemory(Element\precedent, @Element.liste, SizeOf(liste))
; on affiche le texte
Debug Element\nom
Code : Tout sélectionner
Structure liste
suivant.l
nom.s
EndStructure
*nouveau1.liste=AllocateMemory(SizeOf(liste))
*nouveau1\nom="David"
*nouveau2.liste=AllocateMemory(SizeOf(liste))
*nouveau1\suivant=*nouveau2
*pointeur_courant.liste=*nouveau2
*pointeur_courant\nom="Nicolas"
*nouveau3.liste=AllocateMemory(SizeOf(liste))
*nouveau2\suivant=*nouveau3
*pointeur_courant.liste=*nouveau3
*pointeur_courant\nom="Laurent"
*nouveau4.liste=AllocateMemory(SizeOf(liste))
*nouveau3\suivant=*nouveau4
*pointeur_courant.liste=*nouveau4
*pointeur_courant\nom="Pierre"
*nouveau5.liste=AllocateMemory(SizeOf(liste))
*nouveau4\suivant=*nouveau5
*pointeur_courant.liste=*nouveau5
*pointeur_courant\nom="Paul"
Debug PeekS(PeekL(*nouveau1\suivant+4))
Debug PeekS(PeekL(PeekL(*nouveau1\suivant)+4))
Debug PeekS(PeekL(PeekL(PeekL(*nouveau1\suivant))+4))
Debug "--------------------"
;Changement de nom de Pierre par Pierrette
PokeS(PeekL(PeekL(PeekL(*nouveau1\suivant))+4),"Pierrette")
Debug PeekS(PeekL(PeekL(PeekL(*nouveau1\suivant))+4))
Debug "--------------------"
Debug PeekS(PeekL(PeekL(PeekL(PeekL(*nouveau1\suivant)))+4))
Code : Tout sélectionner
Structure _LONG
long.l
EndStructure
Structure liste
suivant.l
nom.s
EndStructure
*debut.liste=AllocateMemory(SizeOf(liste))
*debut\nom="David"
*pointeur._LONG=*debut
*nouveau.liste=AllocateMemory(SizeOf(liste))
*pointeur\long=*nouveau
*nouveau\nom="Nicolas"
*pointeur._LONG=*nouveau
*nouveau.liste=AllocateMemory(SizeOf(liste))
*pointeur\long=*nouveau
*nouveau\nom="Laurent"
*pointeur._LONG=*nouveau
*nouveau.liste=AllocateMemory(SizeOf(liste))
*pointeur\long=*nouveau
*nouveau\nom="Paul"
*pointeur._LONG=*nouveau
Debug *debut\nom
*pointeur._LONG=*debut
Debug PeekS(PeekL(*pointeur\long+4))
*pointeur._LONG=*pointeur\long
Debug PeekS(PeekL(*pointeur\long+4))
*pointeur._LONG=*pointeur\long
Debug PeekS(PeekL(*pointeur\long+4))
Code : Tout sélectionner
;Shéma d'une liste chaînée simple
;structure avec 1 seul pointeur pointant vers l'élément suivant
Structure liste
*suivant.liste
nom.s
EndStructure
*debut.liste=AllocateMemory(SizeOf(liste))
*debut\nom="David"
*pointeur.liste=@*debut\suivant
*nouveau.liste=AllocateMemory(SizeOf(liste))
*pointeur\suivant=@*nouveau\suivant
*pointeur.liste=*nouveau
*pointeur\nom="Nicolas"
*nouveau.liste=AllocateMemory(SizeOf(liste))
*pointeur\suivant=@*nouveau\suivant
*pointeur.liste=*nouveau
*pointeur\nom="Paul"
*nouveau.liste=AllocateMemory(SizeOf(liste))
*pointeur\suivant=@*nouveau\suivant
*pointeur.liste=*nouveau
*pointeur\nom="Pierre"
*nouveau.liste=AllocateMemory(SizeOf(liste))
*pointeur\suivant=@*nouveau\suivant
*pointeur.liste=*nouveau
*pointeur\nom="Tony"
Debug *debut\nom
*pointeur1.liste=*debut\suivant
Debug *pointeur1\nom
*pointeur1.liste=*pointeur1\suivant
Debug *pointeur1\nom
*pointeur1.liste=*pointeur1\suivant
Debug *pointeur1\nom
*pointeur1.liste=*pointeur1\suivant
Debug *pointeur1\nom