スタック
JSが資料構造を実現する前の接続リストに続いて2回目である.
1.スタックとは
スタックはデータを置く、減らすことができるデータ構造であり、データを先に置く、データを後に置くという概念である.
FILOとも呼ばれ、First In Last Outという意味です.
ブラウザで[戻る](Back)キーで前のページに移動するのもスタックアクセスと言えます.
2.スタックの基本演算
スタックには基本的にサポートされている演算と機能があり、代表的な演算を見てみましょう.
2.1 push
push
演算はその名の通り押し込むという意味です.上から下へ積み重ねるときはpush
演算を使用します.2.2 pop
次の演算は
pop
であり、push
とは異なり、データは1つずつ取り出される.2.3 getTop
デフォルトでは、スタックは下から上への構造であるため、クラスとして実装されると、一番上のデータを指す
Top
というメンバー変数があります.その値の演算を知る.
2.4 getSize
スタック内のデータの合計数を表します.
3.実施
JSでスタックを実現する方法はいろいろあります.
共に2種類を実現する.
3.1アレイによる実装
const stackObj = {
stack: [],
push(value) {
this.stack.push(value);
},
pop() {
this.stack.pop();
},
top() {
return this.stack[this.stack.length - 1];
},
size() {
return this.stack.length;
},
};
stackObj.push(1);
stackObj.push(2);
stackObj.push(3);
stackObj.push(4);
stackObj.push(5);
console.log(stackObj.stack); // [1,2,3,4,5]
console.log(stackObj.top()); // 5
stackObj.pop();
console.log(stackObj.stack); // [1,2,3,4]
こんなに簡単に実現できます.3.2接続リストによる実施
まず、接続リストで実装されているように、ノードクラスを宣言します.ノードは一般に、メンバー変数として
next
およびvalue
である.class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
接続リストでスタックを実現するのは触れられないかもしれませんが、接続リストの実現を簡単にイメージ図のように立てば、より感じやすくなります.まず、
Stack
クラスは、スタックの最上位値top
と、データ個数を表すsize
とを表すメンバー変数である.class Stack {
constructor() {
this.top = null;
this.size = 0;
}
}
次に示すのはpush
です.まず,新しく生成されたvalueをパラメータとしてノードを生成し,ノードの
next
はtop
を指す.次に、top
をリッチタイムノードに置き換えます.push(newValue) {
const node = new Node(newValue);
node.next = this.top;
this.top = node;
this.size += 1;
}
次はpop
です.pop
の方法は、一番上のtop
を取り出し、top
を交換し、size
1を減らすことで完了します.pop() {
const value = this.top.value;
this.top = this.top.next;
this.size -= 1;
return value;
}
getTop
とgetSize
は、既存の値を返すだけで完了します.getTop() {
return this.top;
}
getSize() {
return this.size;
}
最終コード最終コードには、
traverse
メソッドのループ値が追加されました.class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class Stack {
constructor() {
this.top = null;
this.size = 0;
}
//push
push(value) {
const node = new Node(value);
node.next = this.top;
this.top = node;
this.size += 1;
}
pop() {
const value = this.top.value;
this.top = this.top.next;
this.size -= 1;
return value;
}
getTop() {
return this.top;
}
getSize() {
return this.size;
}
traverse() {
let currNode = this.top;
while (currNode) {
console.log(currNode.value);
currNode = currNode.next;
}
}
}
Reference
この問題について(スタック), 我々は、より多くの情報をここで見つけました https://velog.io/@cjy0029/스택テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol