Stack / 스택
February 14, 2020
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; }