Due stack possono essere implementati in modo efficiente utilizzando un array di dimensioni fisse: lo stack n. 1 inizia dall'estremità sinistra e cresce verso destra, mentre lo stack n. 2 inizia dall'estremità destra e cresce verso sinistra. Lo stesso è possibile per tre pile?
Più in particolare, è possibile implementare tre stack date le seguenti condizioni:
- Hai un array di dimensioni fisse che può contenere N oggetti.
- Finché la somma delle tre dimensioni dello stack è <N, push () non dovrebbe fallire.
- Entrambe le operazioni push () e pop () dovrebbero richiedere O (1).
- Oltre all'array, è possibile utilizzare solo O (1) spazio aggiuntivo.
Ecco alcuni esempi di soluzioni che non soddisfano questi requisiti:
- Dividere l'array in 3 parti fisse e utilizzare ciascuna parte per una pila (viola 2).
- Simile al precedente ma con confini mobili tra pile (viola 3).
- Semplici implementazioni basate su liste collegate (viola 4).
Accetterò algoritmi non banali o prove di impossibilità anche se non soddisfano tutte le condizioni (1) - (4) esattamente, ad esempio, un algoritmo in cui push / pop prende O (1) tempo ammortizzato, o dove il la memoria aggiuntiva è più piccola di O (N), ad es. O (registro N). O una prova di impossibilità che dimostra che, ad esempio, è impossibile accedere a meno di 5 elementi dell'array per push / pop.