JavaScriptスタック


スタック


 JavaScriptではスタックを使用する方法が2つあります.1つ目は配列を用い,2つ目は接続リストで実現する.JavaScript配列は動的に追加でき、push、pop機能が実装されているので、直接使用できます.したがって、接続リストを使用してスタックを実装します.
  接続リストとして実装される際の混同点は,ノードの付加方向がピクチャとして表示されるのではなく,左側の形式で追加されることである.
class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}
 接続リストを使用する必要があるため、ノードクラスが必要です.パラメータとして渡される値を使用してノードを生成します.次を指すポインタはnullに初期化されます.
class Stack {
  constructor() {
    this.top = null;
    this.stackSize = 0;
  }
}
  Stackクラスを作成し、接続リストでtailに対応するtopポインタを使用します.また、スタックのサイズを取得するためにstackSize変数を追加します.

push(targetValue)

Stack.prototype.push = function (newValue) {
  const newNode = new Node(newValue);
  newNode.next = this.top;
  this.top = newNode;
  this.stackSize += 1;
}

Stack.prototype.push2 = (newValue) => {
  const newNode = new Node(newValue);
  newNode.next = this.top;
  this.top = newNode;
  this.stackSize += 1;
}
 push関数はnewValue値を持つ新しいノードを生成する.新しいノードの次のノードは現在のthisです.トップになります.スタックサイズを追加します.△左に追加したので、今は理解が早い.
 push 2関数はarrow関数を用いて実現されたことがある.ただし,stackSize値をNaNとnextとしてundefinedとして出力するエラーが内部に存在する.
arrow関数を使うとき、私はこの点に注意することを学びました.これは私が何気なく考えて、やった後に発見した間違いです.

arrow関数の内部では、それがどのように動作しているかをさらに検索する必要があります.

pop()

Stack.prototype.pop = function() {
  const value = this.top.value;
  this.top = this.top.next;
  this.stackSize -= 1;
  return value;
}
 pop関数は、現在のtopノードの値を返します.top.value値をvalueに保存し、topを現在のtopの次のノードに移動します.(右に移動)stackSizeが1減少します.

size()

Stack.prototype.size = function() {
  return this.stackSize;
}
 size関数はstackSize値を簡単に返します.

完成本

class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

class Stack {
  constructor() {
    this.top = null;
    this.stackSize = 0;
  }
}

Stack.prototype.push = function (newValue) {
  const newNode = new Node(newValue);
  newNode.next = this.top;
  this.top = newNode;
  this.stackSize += 1;
};

Stack.prototype.push2 = (value) => {
  const newNode = new Node(value);
  newNode.next = this.top;
  this.top = newNode;
  this.stackSize += 1;
  console.log(this);
};

Stack.prototype.pop = function () {
  const value = this.top.value;
  this.top = this.top.next;
  this.stackSize -= 1;
  return value;
};

Stack.prototype.size = function () {
  return this.stackSize;
};

const stack = new Stack();
stack.push(1);
stack.push(2);
stack.pop();
stack.push(3);
stack.push(4);
console.log(stack.size());