Stack / 스택
-
정의 : 스택의 LIFO(후입선출 / 늦게 들어온 사람이 빨리 나가기)따라 정렬된 컬렉션
-
사용처 : 프로그래밍 언어의 컴파일, 변수나 메소드 호출을 메모리 저장
-
기능
- push(item) : 원소 추가
- pop() : 원소 반환
- peek() : 가장 위에 있는 원소 참조 확인
- isEmpty() : 스택에 원소가 하나도 없으면 true, 아니면 false
- clear() : 스택의 모든 원소를 제거
- size() : 스택의 모든 원소 갯수
-
코드 구현
class Stack { constructor() { this._arr = [] } push(item) { this._arr.push() } pop() { this.pop() } peak() { return this._arr[this._arr.length - 1] } isEmpty() { return this._arr.length === 0 } clear() { this._arr = [] } size() { return this._arr.length } print() { console.log(this._arr.toString()) } }
-
10 -> 2진수 변환
function divideBy2(decNumber) { let remStack = new Stack() let rem = 0 let binaryString = '' while (decNumber > 0) { // JS는 부동소수점이기 때문에 소수점을 반환하기떄문에 올림한다. rem = Math.floor(decNumber % 2) remStack.push(rem) decNumber = Math.floor(decNumber / 2) } while (!remStack.isEmpty()) { binaryString += remStack.pop().toString() } return binaryString }
-
2, 8, 16 진수에서 사용가능한 모듈 만들기
function divideBy2(decNumber, base) { // base를 추가하여 몇 진법인지 받는다. let remStack = new Stack() let rem = 0 let baseString = '' let digits = '0123456789ABCDEF' while (decNumber > 0) { rem = Math.floor(decNumber % base) // base 변경 remStack.push(rem) decNumber = Math.floor(decNumber / base) // base 변경 } while (!remStack.isEmpty()) { baseString += digits[remStack.pop()] // 16진수는 ABCDEF로 값을 표현하기 때문에 배열로 값을 뽑아낸다. } return baseString }