[JS] 자바스크립트로 덱(Deque) 구현하기

2022. 4. 13. 01:12Front-end/JavaScript

덱(Deque)이란?

Double-ended queue의 약자로 삽입과 삭제가 양쪽 끝에서 모두 발생할 수 있는 선형 자료구조이다.

자바스크립트를 이용해서 양방향 큐(Deque)를 구현해보자.


구현할 메서드(method)

데이터 전체 반환

Deque.getBuffer()

데이터가 비어 있는지 확인

Deque.isEmpty()

앞쪽 데이터 추가 / 삭제

Deque.pushFront() / Deque.popFront()

뒤쪽 데이터 추가 / 삭제

Deque.pushBack() / Deque.popBack()

가장 앞쪽 데이터 반환

Deque.front()

가장 뒤쪽 데이터 반환

Deque.back()

데이터 개수 확인

Deque.size()

데이터 전체 삭제

Deque.clear()


양방향 큐 구현 - getBuffer(), isEmpty()

// Deque(Double-ended queue) 생성자 함수
function Deque(array = []) {
  this.array = array;
}

// 객체 내 테이터 셋 반환
Deque.prototype.getBuffer = function () {
  return this.array.slice();
};

// 데이터가 비어 있는지 확인
Deque.prototype.isEmpty = function () {
  return this.array === 0;
};

let dq = new Deque([1, 2, 3]);
console.log(dq); // Deque { array: [ 1, 2, 3 ] }

let data = dq.getBuffer();
console.log(data === dq.array); // false
console.log(data); // false

console.log(dq.isEmpty()); // [ 1, 2, 3 ]
console.log(Object.getOwnPropertyDescriptors(Deque.prototype));
// {
//     constructor: {
//       value: [Function: Deque],
//       writable: true,
//       enumerable: false,
//       configurable: true
//     },
//     getBuffer: {
//       value: [Function (anonymous)],
//       writable: true,
//       enumerable: true,
//       configurable: true
//     },
//     isEmpty: {
//       value: [Function (anonymous)],
//       writable: true,
//       enumerable: true,
//       configurable: true
//     }
//   }

양방향 큐 구현 - pushFront(), popFront(), pushBack(), popBack()

// 앞쪽 데이터 추가
Deque.prototype.pushFront = function (element) {
  return this.array.unshift(element);
};

// 앞쪽 데이터 삭제
Deque.prototype.popFront = function () {
  return this.array.shift();
};

// 뒤쪽 데이터 추가
Deque.prototype.pushBack = function (element) {
  return this.array.push(element);
};

// 뒤쪽 데이터 삭제
Deque.prototype.popBack = function () {
  return this.array.pop();
};

let dq = new Deque([1, 2, 3]);
console.log(dq); // Deque { array: [ 1, 2, 3 ] }

dq.pushFront(0);
dq.pushBack(4);
console.log(dq); // Deque { array: [ 0, 1, 2, 3, 4 ] }

dq.popFront();
dq.popBack();
console.log(dq); // Deque { array: [ 1, 2, 3 ] }

양방향 큐 구현 - front(), back(), size(), clear()

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

// 가장 뒤쪽 데이터 반환
Deque.prototype.back = function () {
  return this.array.length === 0
    ? undefined
    : this.array[this.array.length - 1];
};

// 데이터 개수 확인
Deque.prototype.size = function () {
  return this.array.length;
};

// 데이터 전체 삭제
Deque.prototype.clear = function () {
  this.array = [];
};

let dq = new Deque([1, 2, 3]);
console.log(dq); // Deque { array: [ 1, 2, 3 ] }

console.log(dq.front()); // 1
console.log(dq.back()); // 3
console.log(dq.size()); // 3

dq.clear();
console.log(dq); // Deque { array: [] }
반응형