Stack, Queue

Judo·2020년 12월 3일
1
post-thumbnail
post-custom-banner

Stack


한 쪽 끝에서만 자료를 넣고 뺄 수 있는 구조(LIFO)
푸쉬(push)와 팝(pop)을 이용해 자료를 넣고 뺀다.

위 사진처럼 출구가 하나뿐인 구조다. 위로 쌓게 되면 가장 늦게 쌓은 데이터가 가장 먼저 나가게 된다. 콜스택에서 메소드들이 호출되고 종료되는 과정이 스택과 비슷하다.

Diagram

Operation

  • push
    • stack에 데이터 입력
  • pop
    • stack에서 맨 뒤에 있는 데이터 출력
  • size
    • stack의 크기

purpose

  • LIFO(후입선출) 구조로 늦게 입력된 데이터부터 먼저 출력하기 위해 사용한다.
  • 호출 스택에 쓰임
  • 초밥집 접시(?)

implement

class Stack {
  constructor() {
    this.stack = [];
  }

  push(element) {
    this.stack.push(element);
  }
  pop() {
    return this.stack.pop();
  }
  size() {
    return this.stack.length;
  }
}

const stack = new Stack();

stack.push(1); // [1]
stack.push(2); // [1, 2]
stack.push(3); // [1, 2, 3]
console.log(stack); 
console.log(stack.size());

stack.pop(); // [1, 2]
stack.pop(); // [1]
stack.pop(); // []
console.log(stack);

Queue

  • 일상생활에서 줄서기

Diagram

Operation

  • head (front, first)
    • dequeue 시 출력되는 부분
  • tail (rear, back)
    • enqueue 시 입력되는 부분
  • enqueue
    • tail에 새로운 데이터 입력
  • dequeue
    • head에 있는 data를 출력 및 삭제

Purpose

  • FIFO 구조로 데이터를 입력, 출력 시 사용한다.

implement

class Queue {
  constructor() {
    this.queue = [];
  }

  enqueue(element) {
    this.queue.push(element);
  }

  dequeue() {
    this.queue.shift();
  }
}

const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log(queue); // [1, 2, 3]

queue.dequeue(); // [2, 3]
queue.dequeue(); // [3]
queue.dequeue(); // []

console.log(queue); // []
profile
즐거운 코딩
post-custom-banner

0개의 댓글