operação de pilha no JavaScript
-
07-07-2019 - |
Pergunta
Estou implementando uma pilha em JavaScript.
Considere o seguinte:
Stack{0,1,2,3} Top:0
Agora o usuário aparece o valor de 2:
Stack{0,1,3} Top:0
Este é um comportamento aceitável para uma pilha? Estou rolando minha própria pilha, mas há alguma construído em código que faria isso por mim?
Meu 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());
Se uma pilha não é o tipo correto de estrutura de dados para esta aplicação, o que seria o correto?
Solução
É legal fazer a operação acima na pilha?
Isso não é uma operação tradicional pilha. Uma estrutura de dados que lhe permitiu fazer isso não poderia realmente ser chamado de uma pilha; é mais de uma planície antiga lista.
Se a pilha não permite remover os dados entre superior e start.what são a estrutura de dados alter usado em javascript para a lógica acima?
Existe errado algo com um simples matriz ? Dá-lhe o item de acesso aleatório escrita que você quer:
var a= [0, 1, 2, 3];
a.splice(1, 1);
// a==[0, 2, 3]
juntamente com métodos de estilo pilha de conveniência para aceder a ambos os pilhas carregadas com dianteiras e traseiras (e, consequentemente, filas):. push / pop / deslocamento / unshift
Não há muito ponto de fazer a sua própria classe wrapper Stack () quando Array () já cobre IMO. Enquanto um cientista da computação pode estar interessado em coisas como a complexidade algorítmica de listas ligadas para pilhas, na prática, você não está indo para ser capaz de melhorar a implementação de matriz otimizada incorporado intérpretes de JavaScript modernos a partir do código de nível superior.
Outras dicas
Não possível fazê-lo com Pop (sem estourar outras coisas ao longo do caminho). Você deve olhar para fornecer uma outra maneira para o usuário a encontrar onde o número 2 está localizado e um outro método para o usuário para extrair que, como o uso conjunto emenda. Mas então isso não é mais uma pilha.
Se você realmente deve usar pilhas, você poderia pop várias vezes, armazenar os dados surgiram em outra pilha temporariamente, empurrando, então quando você estiver pronto, fazer o inverso para colocar o fim da volta pilha no lugar.
Algo como isso é comumente feito por operações undo / redo em aplicações GUI - eles têm uma pilha de operações de desfazer e uma pilha oposta de operações Refazer. Undo move uma ação de pilha A para B, e Redo move uma ação de pilha B a novos impulsos de ação A. A para a pilha de desfazer e apaga o Redo pilha completamente.
Um outro lugar isso é usado é nas listas Voltar / Avançar no seu navegador.