자료구조 / 알고리즘 ✍🏻
⌨️ 데이터(data) : 문자, 숫자, 소리, 그림, 영상 등 실생활을 구성하고 있는 모든 값
또한, 이름, 나이, 키 집 주소 혹은 유전자 DNA까지 데이터로 분류
그러나 데이터는 그 자체만으로 어떤 정보를 가지기 힘들기에 분석하고 정리하여 활용해야 데이터의 의미를 가질 수 있다.
데이터를 목적에 따라 구분, 분류하여 필요에 따라 특징을 잘 파악(분석)하여 정리하고, 활용 해야 한다.
자료구조 정책 : LIFO(Last In Fist Out), FILO(First In Last Out)
- 먼저 들어간 데이터(data)는 가장 나중에 나온다.
Stack의 실사용 예시
Stack의 기본적인 코드
class Stack {
constructor() {
this.storage = {};
this.top = 0; // 스택의 가장 상단을 가리키는 포인터 변수를 초기화 합니다.
}
size() {
return this.top;
}
// 스택에 데이터를 추가 할 수 있어야 합니다.
push(element) {
this.storage[this.top] = element;
this.top += 1;
}
// 가장 나중에 추가된 데이터가 가장 먼저 추출되어야 합니다.
pop() {
// 빈 스택에 pop 연산을 적용해도 에러가 발생하지 않아야 합니다
if (this.size() <= 0) {
return;
}
const result = this.storage[this.top-1];
delete this.storage[this.top-1];
this.top -= 1;
return result;
}
}
자료구조 정책 : FIFO(First In First Out), LILO(Last In Last Out)
- 먼저 들어간 데이터(data)는 먼저 나온다.
Queue의 실사용 예시
컴퓨터와 연결 된 프린터
유튜브와 같은 동영상 스트리밍 앱을 통해 동영상을 시청할 때, 다운로드 된 데이터(data)가 영상을 재생하기에 충분하지 않은 경우가 있습니다. 이때 동영상을 정상적으로 재생하기 위해 Queue에 모아 두었다가 동영상을 재생하기에 충분한 양의 데이터가 모였을 때 동영상을 재생한다.
Queue의 기본적인 코드
class Queue {
constructor() {
this.storage = {};
this.front = 0;
this.rear = 0;
}
size() {
return this.rear - this.front;
}
// 큐에 데이터를 추가 할 수 있어야 합니다.
enqueue(element) {
this.storage[this.rear] = element;
this.rear += 1;
}
// 가장 먼저 추가된 데이터가 가장 먼저 추출되어야 합니다.
dequeue() {
// 빈 큐에 dequeue 연산을 적용해도 에러가 발생하지 않아야 합니다
if (this.size() === 0) {
return;
}
const result = this.storage[this.front];
delete this.storage[this.front];
this.front += 1;
return result;
}
}