선형 자료구조 - 덱(Deque)
덱
- 큐와 달리 모든 방향의 끝에서 삽입과 삭제가 모두 가능한 선형 자료구조이다.
- 큐와 스택을 합친 형태의 자료구조.
구현 - javaScript
- 이중 연결리스트를 활용하여 구현하였다.
'use strict';
class Node {
constructor(value) {
this.value = value;
this.next = null;
this.prev = null;
}
}
class Deque {
constructor() {
this.head = null;
this.tail = null;
this.length = 0;
}
// 덱의 맨 앞에 데이터 삽입
push_front(value) {
const newNode = new Node(value);
if (this.empty()) {
this.head = newNode;
this.tail = newNode;
} else {
newNode.next = this.head;
this.head.prev = newNode;
this.head = newNode;
}
this.length++;
}
// 덱의 맨 뒤에 데이터 삽입
push_back(value) {
const newNode = new Node(value);
if (this.empty()) {
this.head = newNode;
this.tail = newNode;
} else {
newNode.prev = this.tail;
this.tail.next = newNode;
this.tail = newNode;
}
this.length++;
}
// 덱의 맨 앞 데이터 삭제
pop_front() {
if (this.empty()) return -1;
const popNode = this.head;
if (this.size() === 1) {
this.head = null;
this.tail = null;
} else {
this.head = this.head.next;
this.head.prev = null;
}
this.length--;
return popNode.value;
}
// 덱의 맨 뒤 데이터 삭제
pop_back() {
if (this.empty()) return -1;
const popNode = this.tail;
if (this.size() === 1) {
this.head = null;
this.tail = null;
} else {
this.tail = this.tail.prev;
this.tail.next = null;
}
this.length--;
return popNode.value;
}
// 덱의 크기
size() {
return this.length;
}
// 덱이 비었는지에 대한 여부
empty() {
return this.length === 0 ? 1 : 0;
}
// 덱의 가장 앞 데이터 조회
front() {
console.log(`Front : ${this.head.value}`);
return this.empty() ? -1 : this.head.value;
}
// 덱의 가장 뒤 데이터 조회
back() {
console.log(`back : ${this.tail.value}`);
return this.empty() ? -1 : this.tail.value;
}
// 덱의 데이터 출력
print() {
let curNode = this.head;
let str = '';
while (curNode) {
str += curNode.value + ' ';
curNode = curNode.next;
}
if (str.length === 0) {
console.log('데이터가 존재하지 않습니다.\n');
} else {
console.log(`Deque Size : ${this.length} \n${str} \n`);
}
}
}
const deque = new Deque();
deque.push_front(1);
deque.print();
deque.push_front(2);
deque.print();
deque.push_back(3);
deque.print();
deque.push_back(4);
deque.print();
deque.pop_front();
deque.print();
deque.pop_back();
deque.print();
deque.front();
deque.back();
- 결과
Author And Source
이 문제에 관하여(선형 자료구조 - 덱(Deque)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@codenmh0822/선형-자료구조-덱Deque
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
'use strict';
class Node {
constructor(value) {
this.value = value;
this.next = null;
this.prev = null;
}
}
class Deque {
constructor() {
this.head = null;
this.tail = null;
this.length = 0;
}
// 덱의 맨 앞에 데이터 삽입
push_front(value) {
const newNode = new Node(value);
if (this.empty()) {
this.head = newNode;
this.tail = newNode;
} else {
newNode.next = this.head;
this.head.prev = newNode;
this.head = newNode;
}
this.length++;
}
// 덱의 맨 뒤에 데이터 삽입
push_back(value) {
const newNode = new Node(value);
if (this.empty()) {
this.head = newNode;
this.tail = newNode;
} else {
newNode.prev = this.tail;
this.tail.next = newNode;
this.tail = newNode;
}
this.length++;
}
// 덱의 맨 앞 데이터 삭제
pop_front() {
if (this.empty()) return -1;
const popNode = this.head;
if (this.size() === 1) {
this.head = null;
this.tail = null;
} else {
this.head = this.head.next;
this.head.prev = null;
}
this.length--;
return popNode.value;
}
// 덱의 맨 뒤 데이터 삭제
pop_back() {
if (this.empty()) return -1;
const popNode = this.tail;
if (this.size() === 1) {
this.head = null;
this.tail = null;
} else {
this.tail = this.tail.prev;
this.tail.next = null;
}
this.length--;
return popNode.value;
}
// 덱의 크기
size() {
return this.length;
}
// 덱이 비었는지에 대한 여부
empty() {
return this.length === 0 ? 1 : 0;
}
// 덱의 가장 앞 데이터 조회
front() {
console.log(`Front : ${this.head.value}`);
return this.empty() ? -1 : this.head.value;
}
// 덱의 가장 뒤 데이터 조회
back() {
console.log(`back : ${this.tail.value}`);
return this.empty() ? -1 : this.tail.value;
}
// 덱의 데이터 출력
print() {
let curNode = this.head;
let str = '';
while (curNode) {
str += curNode.value + ' ';
curNode = curNode.next;
}
if (str.length === 0) {
console.log('데이터가 존재하지 않습니다.\n');
} else {
console.log(`Deque Size : ${this.length} \n${str} \n`);
}
}
}
const deque = new Deque();
deque.push_front(1);
deque.print();
deque.push_front(2);
deque.print();
deque.push_back(3);
deque.print();
deque.push_back(4);
deque.print();
deque.pop_front();
deque.print();
deque.pop_back();
deque.print();
deque.front();
deque.back();
Author And Source
이 문제에 관하여(선형 자료구조 - 덱(Deque)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@codenmh0822/선형-자료구조-덱Deque저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)