-
타입스크립트로 큐(Queue) 기능을 구현해봤습니다.
큐는 FIFO로 First In First Out, 처음으로 들어온 데이터가 처음으로 나가는 구조입니다.
// 큐 추상화 인터페이스 interface Queue { readonly size: number; enQueue(value: string): void; deQueue(): void; search(num: number): string; } // 추가될 노드 타입 생성 type QueueNode = { value: string; next?: QueueNode; } // 큐 클래스 class QueueImpl implements Queue { private _size: number = 0; // _size 값을 외부에서 접근하지 못하게 묶습니다. private head?: QueueNode; // head는 노드 인터페이스 타입 private tail?: QueueNode; // tail도 노드 인터페이스 타입 // 묶여있는 _size를 밖에서 호출해주기 위해 getter를 사용합니다. get size() { return this._size; } // 큐 추가 enQueue(value: string) { const node: QueueNode = { value }; if (this._size === 0) { this.head = node; } else { this.tail!.next = node; } this.tail = node; this._size++; } // 큐 제거 deQueue() { if (!this.head) throw new Error('queue 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('queue not exist..😑'); if (num < 0 || num >= this._size) { throw new Error('No corresponding stacks found..😣'); } let count: number = 0; let current: QueueNode = this.head; while (count < num) { current = current.next!; count++; } return current.value; } }
주요기능
- size : 현재 들어가있는 데이터의 수
- enQueue : 입력된 데이터를 추가하는 함수
- deQueue : 데이터를 제거하는 함수
- search : 입력된 숫자에 해당하는 데이터를 반환하는 함수 (배열의 index와 같습니다)
마지막으로 콘솔로 테스트 해보겠습니다.
const queue = new QueueImpl(); // 클래스 생성 console.log(queue); // 초기 데이터 // 데이터 추가 queue.enQueue('samsung'); console.log(queue); queue.enQueue('apple'); console.log(queue); queue.enQueue('google'); console.log(queue); // index 확인 console.log(queue.search(0), queue.search(1), queue.search(2)); // 데이터 제거 queue.deQueue(); console.log(queue); queue.deQueue(); console.log(queue); queue.deQueue(); console.log(queue);
밑에는 자바스크립트의 큐입니다.
'코딩 기록 > 타입스크립트' 카테고리의 다른 글
(TypeScript) MEMO! (0) 2021.03.04 (TypeScript) 타입스크립트 스택(Stack, LIFO) 자료구조 구현 (2) 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 댓글