Deux piles peuvent être mises en œuvre efficacement en utilisant un tableau de taille fixe: la pile # 1 commence à partir de l'extrémité gauche et croît vers la droite, et la pile # 2 commence à partir de l'extrémité droite et croît vers la gauche. Est-ce la même chose possible pour trois piles?
Plus précisément, est-il possible d'implémenter trois piles dans les conditions suivantes:
- Vous disposez d'un tableau de taille fixe pouvant contenir N objets.
- Tant que la somme des trois tailles de pile est <N, push () ne devrait pas échouer.
- Les opérations push () et pop () devraient prendre O (1).
- En plus du tableau, vous ne pouvez utiliser que O (1) d'espace supplémentaire.
Voici des exemples de solutions qui ne répondent pas à ces exigences:
- Diviser le tableau en 3 parties fixes et utiliser chaque partie pour une pile (viole 2).
- Similaire à ce qui précède mais avec des limites mobiles entre les piles (viole 3).
- Implémentations simples basées sur des listes chaînées (viole 4).
J'accepte des algorithmes non triviaux ou des preuves d'impossibilité même s'ils ne remplissent pas toutes les conditions (1) - (4) exactement, par exemple, un algorithme où push / pop prend O (1) en temps amorti, ou où le la mémoire supplémentaire est inférieure à O (N), par exemple O (log N). Ou une preuve d'impossibilité qui montre que par exemple, l'accès à moins de 5 éléments du tableau par push / pop est impossible.