Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- computerscience
- 알고리즘
- CS
- 야놀자
- cpu
- 그리디
- 프론트엔드개발자
- 국비지원
- 컴퓨터공학
- 코딩테스트
- Javascript
- 국비지원취업
- KAKAO
- js
- nodejs
- DFS
- github
- 코테
- 패스트캠퍼스
- 백준
- CSS
- 호이스팅
- 너비우선탐색
- git
- 자바스크립트
- LinkSnap
- 컴퓨터과학
- 부트캠프
- BFS
- html/css/js
Archives
- Today
- Total
My Boundary As Much As I Experienced
자바스크립트로 큐(Queue) 구현하기 본문
Queue란?
"Oh, I'll put this in my watch later queue!"
플레이리스트 큐, 입장 대기 큐 등.. 우리가 직관적으로 아는 그 큐 맞다.
선입선출, 들어온 대로 나가는 리스트인 queue이다.
자바스크립트에서 배열과 shift메소드를 Queue 대용으로 쓰면 안 좋은 이유
자바스크립트 배열을 shift 메소드를 쓰며 queue같이 쓰는 것도 가능하긴 하지만
대규모 데이터를 queue로 처리해야될 때 자바스크립트 배열은 좋은 선택지가 아니다.
왜냐하면 shift()메소드로 특정 인덱스 인자를 제거했을 때,
다음 인덱스에 있는 인자를 해당 빈 인덱스에 끌어오고, 또 다다음것을 다음으로 끌어오고...
이런 O(n)시간복잡도의 재배치가 발생하기 때문이다. 얼마 안 되는 데이터면 shift로 처리하고 말지만,
십만개가 넘는 데이터를 shift()할때마다 위와 같은 재배치를 한다면 얼마나 느려질지 안 봐도 뻔하다.
그러므로 주로 자바스크립트로 코테를 한다면 Queue를 외울 수 밖에 없다.
이젠 막 외우려 하지 않아도 저절로 외워진달까..
bfs를 풀려면 필수적으로 알아야 하는 자료구조이기도 하다.
class Queue {
constructor() {
this.list = {};
this.head = 0;
this.tail = 0;
}
enqueue(item) {
this.list[this.tail] = item;
this.tail++;
}
dequeue() {
if (this.head === this.tail) return null;
let item = this.list[this.head];
delete this.list[this.head];
this.head++;
return item;
}
getLength() {
return this.tail - this.head;
}
peek() {
return this.list[this.head];
}
}
'Algorithm > Data Structure' 카테고리의 다른 글
YAML 파일이 뭘까? (0) | 2024.04.23 |
---|---|
이진 트리의 종류와 개념 (1) | 2024.04.07 |
자바스크립트로 트리(Tree) 구현하기 (1) | 2024.04.07 |
자바스크립트로 연결리스트(Linked List) 구현하기 (0) | 2024.03.25 |