2. Data Structure - stack, queue


没入飛行機に乗って、すでに2つ目の課題Data Structureが始まっています.
資料構造でうまくいったstackやqueueを忘れる前に、コメントを残すべきです.

stack



スタックはLIFO構造です.
つまり、最近スタックに追加されたアイテムが最初に削除されます.
もっと簡単に説明して、レストランで皿を考えてみましょう.
皿は柱のように積み上げて、使うときに上のものを出して使います.
これがスタックです.
#stackの方法
push(要素)-スタックの上部に要素を追加します.
pop()-スタックの上部から要素を削除して返します.
size()-スタックの現在の要素数を返します.


簡単なpop,push,sizeコードを記述した.
class Stack {
  constructor() {
    this.storage = {}; // {el}
    this.top = 0;
  }

  size() {
    return this.top
  } // push or pop 을 할 경우 최종적인 결과값을 담는다.

  push(element) {
    this.storage[this.top + 1] = element
    this.top = this.top + 1
  } // stack의 맨위에 담는 것

  pop() {
    let result = this.storage[this.top]
     if(this.top === 0){
      this.top = 0 // 제거한다 ex) 1,2 ... 10 / 10을 pop을 하면 10을 제거 
    }
    else {
      delete this.storage[this.top]
      this.top = this.top - 1
    }
    return result 
  }
}

queue


飲み物を注文する
キュー(queue)は、先にデータを入力するFIFO構造である.
簡単に言えば、カペオンで飲み物を注文した人が並んでいる様子を考えればいいのです.
先に行った人が先に出てきてFist InfirstOut!
Queueのメソッド
Enqueue(element)-キューの後ろに要素を追加します.
dequeue()-キューから要素を削除して返します.
size()-キュー内の現在の要素の数を返します.


queueも上記の方法で実装したコードを記述しようと試みた.
class Queue {
  constructor() {
    this.storage = {};
    this.front = 0;
    this.rear = 0;
  }

  size() {
    return Object.keys(this.storage).length
  }

  enqueue(element) {
    this.storage[this.rear] = element
    this.rear = this.rear + 1
  }

  dequeue() {
    let result = this.storage[this.front]
    delete this.storage[this.front]
    this.front++
    return result 
  }
}
stackとqueueのコンセプトは比較的簡単に終わりました.
次にlinklistとhash tableについてコメントします.