Stack

Stack이란?


위 사진과 같이 서류는 순서대로 쌓여지고 맨 위 서류부터 읽는다고 생각하면 스택을 이해하기 쉽습니다.

Stack (BFS, 깊이탐색)

  • Stack은 LIFO(Last In First Out) 구조를 갖습니다.
  • Stack은 축약 자료형이고 push와 pop을 사용합니다.
  • push로 데이터를 넣어주고 pop을 이용하여 데이터를 뽑아옵니다.
  • 가장 나중에 들어온 데이터를 가장 먼저 사용을 합니다.
  • peek는 가장 나중에 들어온 데이터를 의미합니다.

스택의 추상적 데이터형 (ADT , abstract data type)

  • push : 데이터를 넣음.
  • pop : 데이터를 꺼냄.(마지막 데이터)
  • peek : 데이터의 가장 나중에 넣은 값을 확인만 함.
  • size : 데이터의 개수.
  • isEmpty : 데이터가 비어있는지 확인.
  • clear : 데이터 초기화 (빈 배열을 할당하여 초기화)
  • print : 남아있는 배열의 데이터를 문자열로 출력.

Stack을 javascript로 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const stact = () => {
let items = [];
this.push = (element) => {
return items.push(element);
};
this.pop = () => {
return items.pop();
};
this.peek = () => {
return items[items.length-1];
};
this.size = () => {
return items.length;
};
this.isEmpty = () => {
return items.length === 0;
};
this.clear = () => {
items = [];
};
this.print = () => {
console.log(items.toString())
};
}

Stack을 이용하여 10진수를 2진수로 변환 (본인: javascript)

1
2
3
4
5
6
7
8
9
10
11
12
13
const converter = (num) => {
let arr = [];
let result = '';
while(num>0){
(num%2)? arr.push(1): arr.push(0)
num = Math.floor(num/2);
}
for(let num = arr.length; num>0; num--){
result += arr.pop();
}
return result;
}
console.log(converter(10)); // 1010

Stack을 이용하여 10진수를 2진수로 변환 (강사님: javascript)

1
2
3
4
5
6
7
8
9
10
11
12
13
const divideBy2 = (decimal) => {
let remStack = new Stack(),
rem,
binaryString = '';
while (decimal > 0) {
rem = Math.floor(decimal % 2);
remStack.push(rem);
decimal = Math.floor(decimal / 2);
}
while (!remStack.isEmpty()) {
binaryString += remStack.pop().toString();
}
}

배운점

  • 자료구조에서 중요한 Stack이 어떻게 작동하는지, 어떤 상황에서 사용해야 하는지에 대해 배웠습니다.
  • javascript의 실행컨택스트(Execution Context)에서 논리적 스택구조에 대해 배웠는데 실제 프로그래밍을 하면서 어떻게 작동하는지 이해하게 되었습니다.

    느낀점

  • 강사님은 기존에 javascript로 구현하였던 스택을 이용하여 10진수를 2진수로 변환하였는데 똑같이 이용하는 방법을 익혀야겠습니다.
공유하기