-
자바스크립트로 스택(Stack) 기능을 구현해봤습니다.
스택은 LIFO로 Last In First Out, 마지막으로 들어온 데이터가 처음으로 나가는 구조입니다.
// 스택 클래스 class Stack { constructor() { this._size = 0; // 현재 데이터 수 this.head; // Stack 기준 현재 값 this.tail; // Stack 기준 가장 마지막 값 } // 묶여있는 _size를 밖에서 호출해주기 위해 getter를 사용합니다. get size() { return this._size; } // 스택 추가 push(value) { const node = { value }; if (this._size === 0) { this.head = node; this.tail = node; } else { node.next = this.head; this.head = node; } this._size++; } // 스택 제거 pop() { if (!this.head) throw new Error('stack not exist..😑'); // 스택이 하나도 없는 상태면 에러 발생 if (this.head.value === this.tail.value) { this.tail = undefined; } const next = this.head.next; this.head = next; this._size--; } // 스택 검색 = index search(num) { // 스택이 하나도 없거나 해당하는 스택이 없을 경우에 에러 발생 if (!this.head) { throw new Error('stack not exist..😑'); } else if (num < 0 || num >= this._size) { throw new Error('No corresponding stacks found..😣'); } let count = this._size - 1; let current = this.head; while (num < count) { current = current.next; count--; } return current.value; } }
주요기능
- size : 현재 들어가있는 데이터의 수
- push : 입력된 데이터를 추가하는 함수
- pop : 데이터를 제거하는 함수
- search : 입력된 숫자에 해당하는 데이터를 반환하는 함수 (배열의 index와 같습니다)
마지막으로 콘솔로 테스트 해보겠습니다.
const stack = new Stack(); // 클래스 생성 console.log(stack); // 초기 데이터 // 데이터 추가 stack.push('google'); console.log(stack); stack.push('samsung'); console.log(stack); stack.push('lg'); console.log(stack); // index 확인 console.log(stack.search(0), stack.search(1), stack.search(2)); // 데이터 제거 stack.pop(); console.log(stack); stack.pop(); console.log(stack); stack.pop(); console.log(stack);
밑에는 타입스크립트의 스택입니다.
'코딩 기록 > 자바스크립트' 카테고리의 다른 글
new Date(), toLocaleDateString (현재 날짜,시간 표시하기 / JavaScript) (0) 2021.03.06 (JavaScript) 자바스크립트 큐(Queue, FIFO) 자료구조 구현 (0) 2021.02.09 풍선 터치기 게임 (바닐라 자바스크립트 미니게임) (0) 2021.02.08 Mini Clothing Store (바닐라 자바스크립트) (0) 2021.02.08 물고기 잡기 게임 (바닐라 자바스크립트 미니게임) (0) 2021.02.08 댓글