덱은 양쪽 끝에서(head & tail) 삽입과 제거 모두 가능한 자료 구조의 한 형태이다.

printAll : 모든 데이터 출력
addFirst : head에 데이터 삽입
removeFirst : head에서 데이터 제거
addLast : tail에 데이터 삽입
removeLast : tail에서 데이터 제거
isEmpty : 리스트 비었는지 체크
덱의 구형는 이전에 스태고가 큐의 구현에서 필요한 대부분의 기능을 구현했기 때문에 간단하다.
[Deque.mjs]
✅ printAll
// 이중연결리스트의 printAll()함수를 호출한다.
printAll() {
this.list.printAll();
}
✅ addFirst
addFirst() {
this.list.insertAt(0, data);
}
✅ removeFirst
removeFirst() {
return this.list.deleteAt(0);
}
✅ addLast
addLast(data) {
this.list.insertAt(this.list.count, data);
}
✅ removeLast
removeLast() {
return this.deleteLast();
}
✅ isEmpty
isEmpty() {
return this.list.count == 0;
}
[test_deque.mjs]
import { Deque } from "./Deque.mjs";
// Deque 개채 만들어주기
let deque = new Deque();
// 📌 addFrist
console.log("=== addFrist ===");
// 덱이 비었는지 isEmpty() 함수 출력
console.log(`isEmpty: ${deque.isEmpty()}`);
// addFirst 함수로 1부너 5까지 넣어준다.
deque.addFirst(1);
deque.addFirst(2);
deque.addFirst(3);
deque.addFirst(4);
deque.addFirst(5);
// printAll 로 모든 요소 출력
deque.printAll();
// 덱이 비었는지 isEmpty() 함수 출력
console.log(`isEmpty: ${deque.isEmpty()}`);
console.log("\n");
// 📌 removeFirst
// 호출할 때마다 printAll 함수를 호출해서 변화 출력
console.log("=== removeFirst ===");
deque.removeFirst();
deque.printAll();
deque.removeFirst();
deque.printAll();
deque.removeFirst();
deque.printAll();
deque.removeFirst();
deque.printAll();
deque.removeFirst();
deque.printAll();
// 덱이 비었는지 isEmpty() 함수 출력
console.log(`isEmpty: ${deque.isEmpty()}`);
console.log("\n");
// 📌 addLast
// addLast 함수로 1부터 5까지 삽입
console.log("=== addLast ===");
deque.addLast(1);
deque.addLast(2);
deque.addLast(3);
deque.addLast(4);
deque.addLast(5);
deque.printAll();
// 덱이 비었는지 isEmpty() 함수 출력
console.log(`isEmpty: ${deque.isEmpty()}`);
console.log("\n");
// 📌 removeLast
console.log("=== removeLast ===");
deque.removeLast();
deque.printAll();
deque.removeLast();
deque.printAll();
deque.removeLast();
deque.printAll();
deque.removeLast();
deque.printAll();
deque.removeLast();
deque.printAll();
// 덱이 비었는지 isEmpty() 함수 출력
console.log(`isEmpty: ${deque.isEmpty()}`);
출력!!!

addFirst와 removeFirst를 이용하면 스택이 되고 마찬가지로 addLast와 removeLast를 이용해도 스택이 된다.
반대로 큐를 만들기 위해서는 addFirst와 removeLast를 사용하거나 addLast 와 removeFirst를 이용하면 된다.