import { SingleNode } from './node.js';
/** Queue 클래스 생성 */
class Queue {
constructor() {
this.head = null;
this.tail = null;
this.length = 0;
}
/**
* 현재 Queue의 요소 개수를 리턴한다.
* @return {number}
*/
size() {
return this.length;
}
/**
* value 로 새 노드를 만들어 tail에 삽입한다.
* @param {*} value
* @return {Queue} 자기 자신을 리턴.
*/
enqueue(value) {
const newNode = new SingleNode(value);
if (!this.length) {
this.head = newNode;
} else {
this.tail.next = newNode;
}
this.tail = newNode;
this.length += 1;
return this;
}
/**
* head 노드를 pop 해서 그 값을 리턴한다.
* @return {*}
*/
dequeue() {
if (!this.length) return undefined;
const poppedNode = this.head;
this.head = this.head.next;
if (this.length === 1) this.tail = null;
this.length -= 1;
return poppedNode.value;
}
}
export { Queue };