-
타입스크립트로 스택(Stack) 기능을 구현해봤습니다.
스택은 LIFO로 Last In First Out, 마지막으로 들어온 데이터가 처음으로 나가는 구조입니다.
// 스택 추상화 인터페이스 interface Stack { readonly size: number; push(value: string): void; pop(): void; search(num: number): string; } // 추가될 노드 타입 생성 type StackNode = { value: string; next?: StackNode; } // 스택 클래스 class StackImpl implements Stack { private _size: number = 0; // _size 값을 외부에서 접근하지 못하게 묶습니다. private head?: StackNode; // head는 노드 인터페이스 타입 private tail?: StackNode; // tail도 노드 인터페이스 타입 // 묶여있는 _size를 밖에서 호출해주기 위해 getter를 사용합니다. get size() { return this._size; } // 스택 추가 push(value: string) { const node: StackNode = { 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: number): string { // 스택이 하나도 없거나 해당하는 스택이 없을 경우에 에러 발생 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: number = this._size - 1; let current: StackNode = this.head; while (count > num) { current = current.next!; count--; } return current.value; } }
주요기능
- size : 현재 들어가있는 데이터의 수
- push : 입력된 데이터를 추가하는 함수
- pop : 데이터를 제거하는 함수
- search : 입력된 숫자에 해당하는 데이터를 반환하는 함수 (배열의 index와 같습니다)
마지막으로 콘솔로 테스트 해보겠습니다.
const stack = new StackImpl(); // 클래스 생성 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);
밑에는 자바스크립트의 스택입니다.
'코딩 기록 > 타입스크립트' 카테고리의 다른 글
(TypeScript) MEMO! (0) 2021.03.04 (TypeScript) 타입스크립트 큐(Queue, FIFO) 자료구조 구현 (0) 2021.03.04 (TypeScript) 타입스크립트 interface와 Type Alias(타입 별칭) (0) 2021.03.04 (TypeScript) 타입스크립트 inference & assertion (타입 추론 & 타입 단언) (0) 2021.03.04 (TypeScript) 타입스크립트 Intersection Type(인터섹션 타입) (0) 2021.03.04 댓글