Problema com uma questão Estrutura de dados (Pilha)

Estou com um problema com essa questão:

Elabore um método para manter duas pilhas dentro de um único vetor linear de modo que nenhuma das pilhas incorra em estouro até que toda a memória seja usada, e uma pilha inteira nunca seja deslocada para outro local dentro do vetor. Escreva os métodos me Java: push1, push2, pop1 e pop2, para manipular as duas pilhas. (Dica: as duas pilhas crescem na direção da outra.)

Implementei minha pilha da seguinte forma:

public class Pilha<T> {

    public T[] elementos;
    public int topo;

    public Pilha() {
        elementos = (T[]) new Object[10];
        topo = -1;
    }

    

    public boolean inserir(T e) {
        if (!estaCheia()) {
            topo++;
            elementos[topo] = e;
            return true;
        }
        return false;
    }

    public boolean estaVazia() {
        return topo == -1;
    }

    public boolean estaCheia() {
        return this.topo == this.elementos.length - 1;
    }

    public T remover() {
        if (!estaVazia()) {
            return elementos[topo--];
        }
        return null;

    }

    public int tamanho() {
        return this.elementos.length;
    }

    

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("[");

        for (int i = 0; i <= this.topo; i++) {
            sb.append(this.elementos[i]);
            if (i < this.topo) {
                sb.append(", ");
            }
        }

        sb.append("]");

        return sb.toString();
    }

}

Não faço ideia de como criar esse método!!
Pensei em utilizar duas pilhas e remover de uma para colocar na outra, mas n creio que seja isso. Alguém poderia me dar uma luz?

O enunciado diz o seguinte: Elabore um método para manter duas pilhas dentro de um único vetor linear

Ou seja, você vai ter um único vetor para representar as duas pilhas.

O conceito é bem simples, você já tem o seu seu array de 10 elementos
O que vai mudar é que você terá dois topos, um da 1ª pilha e outro da 2ª pilha.

O topo da 1ª pilha inicializa na posição 0 do array e vai “crescendo pra cima” 0, 1, 2, 3…

O topo da 2ª pilha inicializa na posição 9 do array e vai “crescendo pra baixo” 9, 8, 7, 6…

  • O método push1 incrementa o topo1
  • O método pop1 decrementa o topo1
  • O método push2 decrementa o topo2
  • O método pop2 incrementa o topo2

Como identificar um estouro de pilha:

  • Quando topo1 for maior que 9
  • Quando topo2 for menor que 0
  • Quando topo1 e topo2 estiverem com o mesmo valor
1 curtida