TransWikia.com

¿Cómo ordenar ascendente mente una pila que recibe elementos por un método?

Stack Overflow en español Asked by Pablo Leon on December 9, 2021

Así se agregan los números a la pila ahora lo se tendrían que hacer es ordenarlos de menor a mayor utilizando únicamente pilas.

Pila pila = new Pila();
// Llena la pila.
pila.push( new Nodo(6) );
pila.push( new Nodo(9) );
pila.push( new Nodo(12) );
pila.push( new Nodo(62) );
pila.push( new Nodo(21) );

2 Answers

La forma más sencilla de hacerlo es utilizando dos pilas. La pila original, y una auxiliar.

Entonces lo que tienes que hacer es:

  1. Si la pila está vacía, insertas el nodo
  2. Si la pila no está vacía, comienzas a sacar elementos de la pila original y moverlos a la pila auxiliar. La condición para seguir sacando elementos de la pila original y moverlos a la auxiliar es pila.isEmpty() && pila.peek().nodoValue > newNodeValue, donde newNodeValue es el valor del nuevo nodo a insertar.
  3. Ya que hayas encontrado un peek que sea menor al valor a insertar, puedes ingresar el nuevo nodo a la pila.
  4. El paso final sería mover todos los valores de la pila auxiliar de regreso a la pila original.

Te dejo un repl.it con el código para que veas como funciona. En mi caso use el Stack que viene en Java, pero puedes hacer que funcione con la clase que tu hayas creado. https://replit.com/@JacoboTapia/OrderedStack#Main.java

Answered by Jacobo on December 9, 2021

Podrías enviar los datos de la pila a un array y ordenarlo:

int o = 0;
for(int i=0;!pila.empty;i++){
    vec[i] = pila.pop();//no estoy seguro si lo debuelve en int o hay que convertirlo
    o++;
}
vec.sort();//de forma ascendente
for(int i=0;i<=o;i++){
    pila.push(vec[i]);
}

Espero te sirva. ^-^

Answered by Randy Jesús on December 9, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP