[자료구조&알고리즘] 스택(Stack)

cojet·2022년 10월 20일
0

자료구조&알고리즘

목록 보기
5/16

스택(Stack)

Last In First Out(선입후출)이라는 개념을 가진 선형 자료구조 입니다.
바닥이 막힌 상자를 생각하면 쉽게 이해하실 수 있습니다.

스택 메모리

스택 메모리는 함수가 실행되면 지역변수, 매개변수가 저장되는 메모리 영역입니다.
다음 코드가 실행되면 어떤일이 발생할까요?

fucntion sum(a, b) {
  return a + b;
}

function print(value) {
  console.log(value);
}

print(sum(5, 10))
  

  1. 안쪽에 위치한 sum함수가 실행: 스택 메모리에 push
  2. 값이 반환되면 pop 하여 스택 메모리에서 제거
  3. print함수 실행: sum함수의 반환값으로 실행되어 스택 메모리에 push
  4. console.log 실행: 스택 메모리에 push
  5. log가 출력되면 스택 메모리에서 제거
  6. print도 함수 호출이 완료되면서 메모리에서 제거

JavaScript로 구현

Array로 구현

const stack = []

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

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

// get Top
console.log(stack[stack.length - 1]); // 2

Linked List로 구현

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

class Stack {
  constructor() {
    this.top = null;
    this.size = 0;
  }
  
  push(value) {
    const node = new Node(value);
    node.next = this.top;
    this.top = node;
    this.size++
  }
  
  pop() {
    const value = this.top.value;
    this.top = this.top.next;
    this.size--
    return value;
  }
  
  size() {
    return this.size;
  }
}

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

0개의 댓글