J'ai pensé pendant un certain temps sur la façon d'aller sur la mise en œuvre d'un deque (c'est un double-ended queue) comme des données immuables de la structure.
Il semble y avoir différentes façons de le faire. Autant que je sache, immuable structures de données sont généralement hiérarchique, de sorte qu'une grande partie de celui-ci peut être réutilisé après la modification des opérations telles que l'insertion ou la suppression d'un élément.
Eric Lippert a deux articles sur son blog à propos de ce sujet, ainsi que des exemples d'implémentations en C#.
Ses deux implémentations me paraît plus complexe qu'est réellement nécessaire. Ne pouvait pas deques simplement être mis en œuvre comme des arbres binaires, où les éléments ne peuvent être insérés ou retirés sur le très "à gauche" (le front) et sur les très "à droite" (le dos) de l'arbre?
o
/ \
… …
/ \
… …
/ \ / \
front --> L … … R <-- back
En outre, l'arbre pourrait être raisonnablement équilibré avec des rotations:
- droit des rotations lors de l'insertion à l'avant ou à l'enlèvement de l'arrière, et
- gauche rotations lors de l'enlèvement de l'avant ou de l'insertion à l'arrière.
Eric Lippert est, à mon avis, une personne très intelligente qui je respecte profondément, mais il n'a apparemment pas envisager cette approche. Donc je me demande, c'est pour une bonne raison? Mon approche proposée de la mise en œuvre de deques naïf?