코드노트

자바스크립트 자료구조 큐(Queue) 본문

Code note/자바스크립트

자바스크립트 자료구조 큐(Queue)

코드노트 2022. 9. 28. 15:53

큐(Queue)

- 먼저 넣은 데이터가 먼저 나오는 FIFO(First In First Out) 기반의 선형 자료 구조

 - stack과 다르게 앞으로 먼저 나오는 자료구조


Queue(): 생성자 함수로 초기 데이터 설정
function Queue(array) {
  this.array = array ? array : [];
  this.tail = array ? array.length : 0;
  this.head = 0;
}

- array가 있는 경우에는 array 아니면 빈 배열


getBuffer(): 객체 내 데이터 셋 반환
Queue.prototype.getBuffer = function () {
  return this.array.slice();
};

- 현재 array를 slice로 복사하여 반환


isEmpty(): 객체 내 데이터 유무
Queue.prototype.isEmpty = function () {
  return this.array.length === 0;
};

- 객체 내에 length를 확인하며 데이터 유무를 확인


enqueue(): 데이터 추가
Queue.prototype.enqueue = function (element) {
  // return this.array.push(element);
  return (this.array[this.tail++] = element);
};

- push로도 추가를 할 수 있지만 index로 접근하게 되면 tail을 이용해서 데이터를 추가할 수 있다.


dequeue(): 데이터 삭제
Queue.prototype.dequeue = function () {
  // return this.array.shift();
  if (this.tail === this.head) return undefined;
  let element = this.array[this.head++];
  delete this.array[this.head++];
  return element;
};

- shift를 사용하게 되면 O(n)이기 때문에 index로 접근하는 코드이다.

- 만약 tail과 head가 같으면 undefined;

- el 에 현재 array.head인 첫 index에 ++ 을 하여 요소를 el에 넣어주고

- 그 요소는 지운다. 그리고 el을 리턴한다.

 

front(): 가장 첫 데이터 반환
Queue.prototype.front = function () {
  return this.array.length === 0 ? undefined : this.array[0];
};

 

size(): 큐 내 데이터 개수 확인
Queue.prototype.size = function () {
  return this.array.length;
};

 

clear(): 큐 초기화
Queue.prototype.clear = function () {
  this.array = [];
};