学ぶためのJavaScriptのデータ構造とアルゴリズム() - スタック

スタック

スタックとは何ですか?

スタック(スキッパー):LIFOの一種(LIFO:最初のうちの最後の)データ構造。

  • スタックの構造の基本的な考え方:スタック、スタックボトム、スタック、スタック
    スタック構造を示しています
  • 関連オペランドスタック構造

スタックプッシュ、PEEKチェックトップ要素をスタックをポップ、isEmpltyが空で、明確な空のスタックサイズのスタック要素
ここに画像を挿入説明

スタック構造を実現 - アレイ

  • 実践:操作クラスの配列をカプセル化します
function Stack(){
    var items = []; // 用var的目的是为了私有变量,而不用this.items.
    // 入栈
    this.push=function(item){
        items.push(item)
    }
    // 获取栈顶元素
    this.peek = function(){
        return items[items.length-1];
    }
    // 出栈:拿出栈顶元素
    this.pop = function(){
        items.pop()
    }
    // 栈是否为空
    this.isEmpty = function(){
        return items.length===0
    }
    // 清空栈
    this.clear = function(){
        item = []
    }
    // 栈大小
    this.size = function(){
        return items.length;
    }
}

スタック例:小数進数回転

原理:トップにスプライシング底で得られる余りあたり2つ以上を取ることである進転送バイナリの10進数。

ここに画像を挿入説明

原則:
1、番号を取得する必要がありますか?上記のように、各時間後に2整数毎最小を取ることに加えて、剰余をとる
構造とるそれぞれの場合において、スタックの残りの部分を追加して、2
3、進数スタックに一緒になってそれぞれ。最後を除く1から図無数、各画像のモザイクに残り、1010

function to2(num){
    var stack = new Stack();
    var yushu;
    var res='';
    while(num>0){ // 不断取余,入栈
        yushu = num % 2;  
        stack.push(yushu); 
        num = Math.floor(num / 2); 
    }
    while(!stack.isEmpty()){ // 出栈拿结果
        res +=  stack.pop();
    }
    return res;
}
console.log(to2(10)); // 1010

スタックのシナリオ

  • ロール・スタック:プログラミング言語コンパイラやメモリ内の保存変数、メソッド呼び出し
  • スタック機能(関数呼び出しスタック):コンピュータのメモリ・スタックに、スタック機能は、コールスタックを終了し、その後、最初にコールします。構造
function fn1(){
	console.log('fn1 finished')
}
function fn2(){
	fn1();
	console.log('fn2 finished')
}
fn2();  // fn1 finished--->fn2 finished
  • 上:FN1、スタックした後、スタックメモリにFN2最初の呼び出し、その後、ルールスタック構造「最初から、最後の」に沿って、スタックの実行を終了FN2、スタックファーストアウトFN1を実行します
114元記事公開 ウォンの賞賛146 ビューに25万+を

おすすめ

転載: blog.csdn.net/Sophie_U/article/details/103739296