[UDF] LinkedList

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 131
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

[UDF] LinkedList

#1

Message par Numeric »

Histoire : Suivi d'une playlist de musique avec une liste chaînée en AutoIt

Il était une fois un passionné de musique nommé Bob. Bob adorait écouter de la musique, et il avait une collection de chansons variée. Cependant, il avait du mal à gérer sa playlist de manière efficace. C'est alors qu'il a découvert une bibliothèque AutoIt personnalisée qui offrait une liste chaînée pour gérer sa playlist de manière optimale.

Étape 1 : Initialisation de la liste chaînée pour la playlist

Bob a décidé de créer une liste chaînée pour sa playlist en utilisant la fonction `LinkedList()` de la bibliothèque. Voici comment il a procédé :
$playlist = LinkedList()
La liste chaînée

Code : Tout sélectionner

$playlist
a été créée avec succès, prête à stocker les chansons de sa playlist.

Étape 2 : Ajout de chansons à la playlist

Bob voulait ajouter plusieurs chansons à sa playlist. Il a utilisé la fonction `

Code : Tout sélectionner

insertAtEnd()
pour ajouter des chansons à la fin de la liste :
$playlist.insertAtEnd("Bohemian Rhapsody - Queen")
$playlist.insertAtEnd("Imagine - John Lennon")
$playlist.insertAtEnd("Hotel California - Eagles")




Sa playlist ressemblait maintenant à ceci :
1. Bohemian Rhapsody - Queen
2. Imagine - John Lennon
3. Hotel California - Eagles

Étape 3 : Lecture de la playlist

Lorsque Bob souhaitait écouter sa playlist, il utilisait un itérateur qu'il avait obtenu avec

Code : Tout sélectionner

$playlistIterator = $playlist.iterator()
:


Ensuite, il a pu lire sa playlist une chanson à la fois :
While Not $playlistIterator.isDone()
    $currentSong = $playlistIterator.next()
    PlaySong($currentSong)
    ConsoleWrite("En train d'écouter : " & $currentSong & @CRLF)
WEnd
Grâce à la liste chaînée et à l'itérateur, Bob pouvait parcourir sa playlist et jouer les chansons en séquence.

Étape 4 : Suppression de chansons

Lorsque Bob en avait assez d'une chanson dans sa playlist, il pouvait la supprimer facilement à l'aide de la fonction `

Code : Tout sélectionner

deleteData()
` :
$playlist.deleteData("Imagine - John Lennon")
La chanson a été retirée de sa playlist.

Étape 5 : Gestion de la playlist en continu

Bob a également utilisé d'autres fonctions de la bibliothèque pour ajouter, supprimer et gérer sa playlist, tout en l'écoutant en continu.

Exemple 1 : Ajout d'une nouvelle chanson
$playlist.insertAtEnd("Stairway to Heaven - Led Zeppelin")
Exemple 2 : Suppression de la première chanson

Code : Tout sélectionner

$playlist.remove_first_node()
Exemple 3 : Recherche d'une chanson
$position = $playlist.search("Hotel California - Eagles")
If $position >= 0 Then
    ConsoleWrite("Chanson trouvée à la position : " & $position & @CRLF)
Else
    ConsoleWrite("Chanson non trouvée." & @CRLF)
EndIf

Sa passion pour la musique n'avait jamais été aussi facile à vivre, et il pouvait désormais personnaliser sa playlist en toute simplicité.

Ainsi, Bob a utilisé avec succès les fonctions de la liste chaînée en AutoIt pour gérer sa playlist musicale, créer une expérience musicale personnalisée et profiter de sa musique préférée. La liste chaînée a grandement amélioré sa gestion de playlist, et il pouvait maintenant explorer sa collection de chansons de manière optimale.

Pour plus d'informations sur l'utilisation de listes chaînées en AutoIt, n'hésitez pas à poser des questions ou à partager vos propres expériences.


L'UDF (User-Defined Function) est destiné à la création et à la manipulation de listes chaînées (linked lists) en AutoIt. Voici quelques avantages de cet UDF :

1. Structures de données flexibles : Les listes chaînées sont des structures de données flexibles qui peuvent être utilisées pour stocker des éléments de manière dynamique. Contrairement aux tableaux en AutoIt, les listes chaînées ne nécessitent pas une taille fixe et peuvent augmenter ou réduire leur taille au besoin.

2. Insertion et suppression efficaces : Les listes chaînées permettent une insertion et une suppression efficaces d'éléments, en particulier au début et à la fin de la liste, car elles ne nécessitent pas de déplacement d'éléments, ce qui peut être coûteux dans un tableau.

3. Manipulation des données : Cet UDF fournit des méthodes pour insérer, supprimer, mettre à jour, et rechercher des éléments dans la liste chaînée. Il facilite également la récupération du premier et du dernier élément de la liste.

4. Réversibilité : Vous avez la possibilité de renverser l'ordre des éléments dans la liste chaînée à l'aide de la fonction `_reverse`, ce qui est une opération complexe dans un tableau.

5. Déduplication : L'UDF propose également une méthode pour supprimer les doublons dans la liste, ce qui peut être utile dans certaines situations.

6. Itération : Vous pouvez créer un itérateur pour parcourir les éléments de la liste chaînée un par un, ce qui facilite la traversée de la liste.

En ce qui concerne les performances, elles dépendent de l'utilisation spécifique. Les listes chaînées sont généralement efficaces pour les opérations d'insertion et de suppression au début et à la fin de la liste, mais moins efficaces pour l'accès aléatoire (par indice) par rapport aux tableaux.

Comparé aux tableaux en AutoIt, voici quelques avantages et inconvénients :

Avantages des listes chaînées par rapport aux tableaux :
- Les listes chaînées peuvent redimensionner dynamiquement leur taille sans nécessiter de réaffectation de mémoire.
- Les insertions et les suppressions sont plus efficaces au début et à la fin de la liste.
- Elles ne gaspillent pas d'espace mémoire, car elles n'ont pas de taille fixe.

Inconvénients des listes chaînées par rapport aux tableaux :
- L'accès aux éléments par indice est moins efficace dans les listes chaînées, car il nécessite une traversée séquentielle depuis le début ou la fin de la liste.
- Les listes chaînées consomment un peu plus de mémoire en raison des pointeurs supplémentaires associés à chaque élément.
- La complexité de certaines opérations, comme la recherche d'un élément donné, peut être plus élevée dans les listes chaînées que dans les tableaux.

En résumé, les listes chaînées sont utiles lorsque vous avez besoin de flexibilité pour insérer et supprimer des éléments de manière efficace, tandis que les tableaux sont plus performants pour l'accès direct aux éléments par indice. Le choix entre les deux dépend des exigences spécifiques de votre application.

POUR UTILISER CET UDF, VOUS DEVEZ INCLURE AutoItObject.au3


exemples
#include "LinkedList.au3" ;inclure l'udf



; Créer une nouvelle liste chaînée
$myList = LinkedList()

; Vérifier si la liste est vide
If $myList.isEmpty() Then
    ConsoleWrite("La liste est vide." & @CRLF)
EndIf

; Ajouter des éléments à la liste
$myList.insertAtEnd("Premier élément")
$myList.insertAtEnd("Deuxième élément")
$myList.insertAtEnd("Troisième élément")

; Afficher la liste
ConsoleWrite("Liste chaînée avant mise à jour :" & @CRLF)
$myList.printLL()

; Vérifier la taille de la liste
$size = $myList.sizeOfLL()
ConsoleWrite("Taille de la liste : " & $size & @CRLF)

; Rechercher un élément dans la liste
$searchResult = $myList.search("Deuxième élément")
If $searchResult >= 0 Then
    ConsoleWrite("L'élément 'Deuxième élément' se trouve à l'index " & $searchResult & @CRLF)
EndIf

; Obtenir le premier et le dernier élément
$firstElement = $myList.getFirstNode()
$lastElement = $myList.getLastNode()
ConsoleWrite("Premier élément : " & $firstElement & @CRLF)
ConsoleWrite("Dernier élément : " & $lastElement & @CRLF)

; Créer un itérateur pour parcourir la liste
$iterator = LinkedListIterator($myList)
ConsoleWrite("Itération de la liste chaînée : " & @CRLF)
While Not $iterator.isDone()
    $data = $iterator.next()
    ConsoleWrite($data & @CRLF)
WEnd

; Supprimer un élément
$myList.deleteData("Troisième élément")

; Afficher la liste mise à jour
ConsoleWrite("Liste chaînée après suppression :" & @CRLF)
$myList.printLL()

; Dédupliquer la liste
$myList._deduplicate()

; Afficher la liste dédupliquée
ConsoleWrite("Liste chaînée après déduplication :" & @CRLF)
$myList.printLL()

; Trier la liste
$myList.sort()

; Afficher la liste triée
ConsoleWrite("Liste chaînée triée :" & @CRLF)
$myList.printLL()
Fichiers joints
LinkedList.au3
(33.6 Kio) Téléchargé 83 fois
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Répondre