質問

JavaScriptでスタックを実装しています。

検討:

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

ユーザーは2の値をポップします

Stack{0,1,3} Top:0

これはスタックに受け入れられる動作ですか?私は自分のスタックをローリングしていますが、これを行うための組み込みコードはありますか?

マイコード:

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());

スタックがこのアプリケーションのデータ構造の正しいタイプではない場合、正しいものは何ですか?

役に立ちましたか?

解決

  

上記の操作をスタックで行うことは合法ですか?

これは従来のスタック操作ではありません。それを可能にするデータ構造は、実際にはスタックとは言えません。それは単なる古いリストです。

  

スタックがtopとstartの間のデータの削除を許可しない場合、上記のロジックのJavaScriptで使用されるalter datastructureは何ですか?

単純な配列に何か問題がありますか?ランダムアクセスアイテムの書き込みができます。

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

さらに、フロントロードスタックとテールスタック(およびその結果としてキュー)の両方にアクセスするためのスタックスタイルの便利なメソッド:push / pop / shift / unshift。

Array()がすでにIMOをカバーしている場合、独自のStack()ラッパークラスを作成することはあまり意味がありません。コンピューター科学者はスタックのリンクリストのアルゴリズムの複雑さなどに興味があるかもしれませんが、実際には、高レベルコードから最新のJavaScriptインタープリターに組み込まれた最適化された配列実装を改善することはできません。 >

他のヒント

Popで実行することはできません(途中で他のものをポップすることはできません)。配列スプライスを使用するなど、ユーザーが2番の場所を見つけるための別の方法と、それを抽出する別の方法の提供を検討する必要があります。しかし、それまでにこれはスタックではなくなりました。

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

本当にスタックを使用する必要がある場合は、複数回ポップし、プッシュして一時的に別のスタックにポップしたデータを保存し、完了したら逆にスタックの終わりを元に戻します。

このようなことは通常、GUIアプリケーションの元に戻す/やり直し操作によって行われます。元に戻す操作のスタックと、やり直し操作の反対側のスタックがあります。元に戻すはアクションをスタックAからBに移動し、やり直しはアクションをスタックBからAに移動します。新しいアクションは元に戻すスタックにプッシュされ、やり直しスタックを完全に消去します。

これが使用される別の場所は、ブラウザの戻る/進むリストです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top