Pregunta

Estoy implementando una pila en JavaScript.

Considere:

Stack{0,1,2,3} Top:0

Ahora el usuario muestra el valor de 2:

Stack{0,1,3} Top:0

¿Es este un comportamiento aceptable para una pila? Estoy rodando mi propia pila, pero ¿hay algún código integrado que pueda hacer esto por mí?

Mi código:

function Stack() //Creating Stack Object
{
    // Create an empty array of cards.
    this.cards = new Array();  //Cards array inside stack object
    this.push  = pushdata;     //Call pushdata function on push operation
    this.pop   = popdata;      //Call popdata function on pop operation
    this.printStack = showStackData; //Call showStackData function on printstack operation
}

function pushdata(data)
{
    this.cards.push(data);
}

function popdata(data)
{
    return this.cards.pop();
}

function showStackData()
{
    return this.cards;
}

var a = new Stack(); //Create stack Object
a.push(12);          //Push Data onto Stack
a.push(32);
a.push(42);
var z = a.pop();
document.write("Data Popped: " + z);
document.write("Stack Output: " + a.printStack());

Si una pila no es el tipo correcto de estructura de datos para esta aplicación, ¿cuál sería la correcta?

¿Fue útil?

Solución

  

¿Es legal hacer la operación anterior en la pila?

Esa no es una operación de pila tradicional. Una estructura de datos que le permitiera hacer eso realmente no podría llamarse una pila; es más una simple lista antigua.

  

Si stack no permite eliminar los datos entre top y start.¿Cuál es la estructura de datos alternativa utilizada en JavaScript para la lógica anterior?

¿Hay algún problema con un simple Array ? Le proporciona la escritura de elementos de acceso aleatorio que desea:

var a= [0, 1, 2, 3];
a.splice(1, 1);
// a==[0, 2, 3]

más métodos convenientes de estilo de pila para acceder a las pilas de carga frontal y de cola (y, en consecuencia, las colas): push / pop / shift / unshift.

No tiene mucho sentido crear su propia clase de contenedor Stack () cuando Array () ya lo cubre IMO. Si bien un científico informático podría estar interesado en cosas como la complejidad algorítmica de las listas vinculadas para las pilas, en la práctica no podrá mejorar la implementación optimizada de Array integrada en los intérpretes de JavaScript modernos a partir de código de nivel superior.

Otros consejos

No es posible hacerlo con Pop (sin hacer estallar otras cosas en el camino). Debe buscar proporcionar otra forma para que el usuario encuentre dónde se encuentra el número 2 y otro método para que el usuario extraiga eso, como el uso de empalme de matriz. Pero para entonces esto ya no es una pila.

http://www.w3schools.com/jsref/jsref_splice.asp

Si realmente debe usar pilas, puede reventar varias veces, almacenar los datos reventados en otra pila temporalmente presionando, luego, cuando haya terminado, haga lo contrario para volver a colocar el extremo de la pila en su lugar.

Las operaciones de Deshacer / Rehacer en aplicaciones GUI suelen hacer algo así: tienen una pila de operaciones de Deshacer y una pila opuesta de operaciones de Rehacer. Deshacer mueve una acción de la pila A a B, y Rehacer mueve una acción de la pila B a A. Una nueva acción empuja a la pila Deshacer y borra la pila Rehacer por completo.

Otro lugar donde se usa esto es en las listas Atrás / Adelante de su navegador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top