[データ構造]−スタック(STACK)


スタック(STACK)


🌻 STACK - LIFO : LAST IN FIRST OUT

スタックの概念

  • 片端からしか資料を入れて取り出すことができないLIFO(Last In First Out)形式の資料構造
  • 後の友人が先に出ます.
  • スタックの主な演算

  • push(item):スタックの上部にアイテムを追加します.
  • pop():スタックの一番上の項目をクリアします.
  • peek():スタックの一番上の項目は取り除かず、戻ります.
  • size():現在のスタック内の要素の数を返します.
  • スタックの実装


    タイルの使用例

    class Stack {
      constructor() {
        this._arr = [];
      }
      // 배열의 뒤에서부터 채우고 빼는 push(), pop()을 통해 LIFO 구조를 구현
      // 즉, 스택이 옆으로 누워 있는 형태
      push(item) {
        this._arr.push(item);
      }
      pop() {
        return this._arr.pop();
      }
      peek() {
        return this._arr[this._arr.length - 1];
      }
    }
    const stack = new Stack();
    stack.push(1);
    stack.push(2);
    stack.push(3);
    console.log(stack.pop());  // 3
    console.log(stack.peek()); // 2

    アレイが使用されていない例

    class Stack {
      constructor() {
        this.storage = {};
        this.top = 0;
        // top 이라는 변수를 사용해 
        // 스택의 가장 윗 부분을 가리키도록 한다.
      }
    
      size() {
        return this.top;
        // top에 담긴 숫자가 결국 스택 안에 있는 요소의 개수가 된다.
      }
    
      push(element) {
        this.storage[this.top] = element;
        this.top += 1;
      }
    
      pop() {
        // top이 0이라면 pop()을 할 수 없다.
        if (this.top) {
          this.top -= 1;
          const popEle = this.storage[this.top];
          delete this.storage[this.top];
          return popEle;
        }
        return 'Stack is empty!';
      }
    }
    
    const stack = new Stack();
    stack.push(1);
    stack.push(2);
    console.log(stack.size()); // 2
    
    console.log(stack.pop());  // 2
    console.log(stack.pop());  // 1
    console.log(stack.pop());  // Stack is empty!

    スタック使用例

  • 再帰アルゴリズムを使用する場合、スタックが便利です.
  • Webブラウザアクセス履歴(後退)
  • 茶碗洗い…?!
  • 取消し
  • Reference

  • https://dev.to/rinsama77/data-structure-stack-and-queue-4ecd
  • https://gmlwjd9405.github.io/2018/08/03/data-structure-stack.html
  • https://helloworldjavascript.net/pages/282-data-structures.html
  • 学習段階なので間違いがあるかもしれません。間違った内容でコメントを残したら修正しますありがとうございます