Question

J'implémente une pile en JavaScript.

Considérez:

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

Maintenant, l'utilisateur affiche la valeur 2:

Stack{0,1,3} Top:0

Est-ce un comportement acceptable pour une pile? Je lance ma propre pile, mais y at-il un code intégré qui ferait cela pour moi?

Mon code:

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 une pile n'est pas le bon type de structure de données pour cette application, quelle serait la bonne?

Était-ce utile?

La solution

  

Est-il légal d'effectuer l'opération ci-dessus dans la pile?

Ce n'est pas une opération de pile traditionnelle. Une structure de données qui vous permettait de faire cela ne pouvait pas vraiment s'appeler une pile; c'est plutôt une vieille liste.

  

Si la pile ne permet pas de supprimer les données entre top et start, quelles sont les autres structures de données utilisées en javascript pour la logique ci-dessus?

Quelque chose ne va pas avec un simple Array ? Il vous donne l'écriture d'élément à accès aléatoire que vous voulez:

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

plus des méthodes pratiques de style pile pour accéder à la fois aux piles chargées à l'avant et aux piles arrière (et, par conséquent, aux files d'attente): push / pop / shift / unshift.

Il n’est pas utile de créer votre propre classe d’empaquetage Stack () lorsque Array () la couvre déjà à l’OMI. Bien qu'un informaticien puisse être intéressé par des choses comme la complexité algorithmique des listes chaînées pour les piles, vous ne pourrez en pratique pas améliorer l'implémentation optimisée de Array intégrée dans les interpréteurs JavaScript modernes à partir de code de niveau supérieur.

Autres conseils

Impossible de le faire avec Pop (sans ajouter d’autres trucs en cours de route). Vous devriez envisager de fournir à l'utilisateur un autre moyen de rechercher l'emplacement du numéro 2 et de l'extraire de cette méthode, par exemple à l'aide de l'épissure de tableau. Mais d’ici là, ce n’est plus une pile.

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

Si vous devez réellement utiliser des piles, vous pouvez les afficher plusieurs fois, les stocker temporairement dans une autre pile en appuyant dessus, puis lorsque vous avez terminé, procédez de la manière inverse pour remettre la fin de la pile en place.

Ce type d'opération est généralement effectué par les opérations Annuler / Répéter dans les applications à interface graphique: elles possèdent une pile d'opérations Annuler et une pile d'opérations Répéter opposées. Annuler déplace une action de la pile A vers la pile et Redo déplace une action de la pile B vers la pile A. Une nouvelle action est insérée dans la pile Undo et efface entièrement la pile Redo.

Un autre endroit utilisé est la liste Précédent / Suivant de votre navigateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top