Comment mettre en œuvre trois piles à l'aide d'un tableau unique

Je suis tombé sur ce problème dans une interview site web. Le problème demande pour mettre efficacement en œuvre les trois piles dans un tableau unique, de sorte qu'aucune débordements de pile jusqu'à ce qu'il n'y a pas d'espace à gauche dans le tableau d'ensemble de l'espace.

Pour la mise en œuvre de 2 piles dans un tableau, il est assez évident: 1ère pile augmente de GAUCHE à DROITE, et la 2ème pile augmente de DROITE à GAUCHE; et quand le stackTopIndex traverse, il signale un dépassement de capacité.

Merci d'avance pour votre réponse perspicace.

Ah, c'est très bien étudié le problème de la " au début des années 70 (ou peut-être plus tôt). En essayant de se rappeler où j'ai vu ce. Knuth? Sedgewick? Standish? Hmm... je pense que Knuth en particulier, ont mentionné un truc/heuristique pour favoriser la croissance rapide de la pile (de N de piles, de 3 dans votre cas), mais ne peuvent pas facilement se rappeler 🙂
Ah, trouvé il, ajoutant que la réponse ci-dessous.
quoi de la demande de faire 3 piles de tableau unique? réel besoin?
La localité de référence. Si nous prenons les trois piles, leur mémoire sera alloué à des endroits différents, de sorte qu'ils pourraient ne pas être dans la mémoire physique (RAM) en même temps. Et, pourrions-nous avoir la page miss.. et devrez apporter la nouvelle de la pile de disque RAM. Alors que, dans le cas de 3 pile comme un tableau de mise en œuvre, le plus souvent, toutes les piles seront sur une seule page, et toutes les piles seront dans la RAM, même si une seule pile est le plus fréquemment utilisé, et d'autres sont utilisés moins souvent.

OriginalL'auteur user369070 | 2010-06-17