Salut langage de programmation: liste liée

Nous continuons à construire le langage Hi . Aujourd'hui, nous considérons l'implémentation intégrée d' une liste chaînée (liste chaînée).



Liste liée>
— , , , , ( ) , , .



Tous les langages industriels ne prennent pas en charge la liste chaînée en tant que structures de données. Cependant, il n'est pas difficile de l'implémenter vous-même en tant que classe ou structure. Pour un travail confortable avec les algorithmes appropriés, nous ajouterons des listes chaînées bidirectionnelles intégrées déjà dans la définition de base du langage Hi.



Commençons par créer une instance de notre liste expérimentale:



VAR list = <"I", "will", "be">


Dans l'exemple ci-dessus, des liens bidirectionnels sont automatiquement créés pour trois nœuds.



Une liste non vide liée dans Hi a toujours un nœud qui est en cours ou "actif". Par défaut, c'est le dernier élément ajouté, qui est maintenant "be". Vérifions ceci:



PRINT list.current  #  "be"


Ajoutons deux autres éléments à notre liste:



list.insert "back", "!"  #  list  : "I", "will", "be", "back", "!"


La méthode d'insertion intégrée ajoute de nouveaux éléments immédiatement après le nœud actif, crée automatiquement de nouveaux liens et rend le dernier élément ajouté courant (vous pouvez ajouter et faire du premier un nouveau nœud de liste à l'aide de la méthode insertFirst).



La suppression est effectuée de la même manière pour l' élément actuel :



list.remove 1  # list  : "I", "will", "be", "back"


Cependant, vous pouvez supprimer plusieurs éléments à la fois, pour cela vous devez d'abord définir le pointeur sur le premier nœud à supprimer :



VAR secList = list
secList.prev 2
secList.remove 2  # secList   : "I", "back"


Dans ce cas, le nœud précédent avant celui supprimé devient le nœud actuel. Si le premier élément de la liste est supprimé, le nouveau premier élément devient celui en cours .



Vous pouvez remplacer le nœud actuel par un autre simplement en attribuant une nouvelle valeur à l'élément:



secList.urrent = "smile"  # secList  : "smile ", "back"


Vous pouvez supprimer tous les nœuds, c'est-à-dire que vous pouvez rendre la liste vide comme ceci:



secList = <>


Il est pratique d'accéder aux premier et dernier nœuds comme suit:



list.first
LET last = list.last  #        


Ainsi, vous pouvez assez facilement effectuer diverses opérations avec la liste:



PRINT list #  "I", "will", "be", "back"
list.first
list.next
list.insert "not"
LET be = list



All Articles