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?

Foi útil?

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.

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

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top