-
타입스크립트 (TypeScript) 타입스크립트로 스택(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);
초기 데이터 데이터 추가 index 확인 데이터 제거 밑에는 자바스크립트의 스택입니다.
(JavaScript) 자바스크립트 스택(Stack, LIFO) 자료구조 구현
자바스크립트로 스택(Stack) 기능을 구현해봤습니다. 스택은 LIFO로 Last In First Out, 마지막으로 들어온 데이터가 처음으로 나가는 구조입니다. // 스택 클래스 class Stack { constructor() { this._size = 0..
kimyang-sun.tistory.com
'코딩 기록 > 타입스크립트' 카테고리의 다른 글
(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 댓글