スタック
スタックとは何ですか?
スタック(スキッパー):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を実行します