Data Structure
[Data Structure] 큐(Queue) & 스택(Stack)
WebDevLee
2024. 5. 16. 23:59
큐(Queue)와 스택(Stack)자료구조에 대해 정리하였습니다.
< 큐(Queue) >
기본적인 자료구조 중 한가지로, 먼저 집어 넣은 데이터가 먼저 나오는 FIFO(First In First Out) 구조로 저장하는 형식을 말합니다.
일반 큐 (Linear Queue), 원형 큐 (Circular Queue), 우선순위 큐 (Priority Queue), 블로킹 큐 (Blocking Queue), 동기화 큐 (Synchronized Queue) 등 다양한 큐의 종류가 있습니다.
Ex)
- 프린터 대기열
- 프로세스 관리
- 운영 체제의 작업 스케줄링
class Queue {
constructor() {
this.items = [];
}
// 큐에 요소 추가
enqueue(element) {
this.items.push(element);
}
// 큐에서 요소 제거 및 반환
dequeue() {
if (this.isEmpty()) {
return "Queue is empty";
}
return this.items.shift();
}
// 큐의 첫 번째 요소 반환 (제거하지 않음)
front() {
if (this.isEmpty()) {
return "Queue is empty";
}
return this.items[0];
}
// 큐가 비어 있는지 확인
isEmpty() {
return this.items.length === 0;
}
// 큐의 크기 반환
size() {
return this.items.length;
}
// 큐 요소들을 문자열로 반환
print() {
return this.items.toString();
}
}
// 큐 사용 예시
const queue = new Queue();
console.log(queue.isEmpty()); // true
queue.enqueue(10);
queue.enqueue(20);
queue.enqueue(30);
console.log(queue.print()); // 10,20,30
console.log(queue.size()); // 3
console.log(queue.isEmpty()); // false
console.log(queue.dequeue()); // 10
console.log(queue.front()); // 20
< 스택(Stack) >
데이터를 순차적으로 쌓아 올리는 구조로, LIFO(Last In, First Out) 원칙에 따라 가장 마지막에 삽입된 데이터가 가장 먼저 삭제되는 방식입니다.
Ex)
- 접시 더미에서 가장 위에 있는 접시 꺼내기
- 페이지 뒤로가기/앞으로가기 스택
class Stack {
constructor() {
this.items = [];
}
// 스택에 데이터를 추가합니다.
push(element) {
this.items.push(element);
}
// 스택의 맨 위 데이터를 제거하고 반환합니다.
pop() {
if (this.isEmpty()) {
return "Stack is empty";
}
return this.items.pop();
}
// 스택의 맨 위 데이터를 제거하지 않고 반환합니다.
peek() {
if (this.isEmpty()) {
return "Stack is empty";
}
return this.items[this.items.length - 1];
}
// 스택이 비어 있는지 확인합니다.
isEmpty() {
return this.items.length === 0;
}
// 스택에 있는 데이터의 개수를 반환합니다.
size() {
return this.items.length;
}
// 스택의 모든 요소를 문자열로 반환합니다. (선택사항)
printStack() {
return this.items.toString();
}
}
// 스택 사용 예제
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack.printStack()); // 출력: 1,2,3
console.log(stack.pop()); // 출력: 3
console.log(stack.peek()); // 출력: 2
console.log(stack.isEmpty()); // 출력: false
console.log(stack.size()); // 출력: 2
console.log(stack.printStack()); // 출력: 1,2