오늘은 자료구조 중 Stack 과 Queue에 대해 학습했다 . 데이터를 효과적으로 관리하기 위해 자료구조가 쓰이고 데이터의 특징을 잘 분석하고 사용해야 자료구조를 잘 활용할 수 있다. 사실 대학교를 다니며 귀에 딱지가 지도록 자료구조에 대해 배웠었는데 그 때에는 자료구조를 왜 써야하는지 크게 와닿지 않았던 것 같다 . 하지만 오늘 다시 복습을 하면서 자료구조의 필요성에 대해 깨달은 것 같다 !! ㅎㅎ
Stack ?
데이터를 순서대로 쌓는 자료구조
입력과 출력이 하나의 방향, 스택의 최상단에서만 이루어지는 제한적 접근
LIFO (Last In First Out) 또는 FILO (First In Last Out)
데이터를 삽입 ( Push)
데이터를 추출 ( POP)
예 ) 브라우저의 뒤로가기 앞으로가기 기능
새로운 페이지 접속 시 현재 페이지를 이전 스택에 보관 -> 뒤로 가기 버튼을 눌러 이전 페이지로 돌아갈 때에는 현재 페이지를 다음 스택에 보관하고 이전 스택에서 POP -> 앞으로 가기 버튼을 눌러 방문한 페이지로 이동할 때에는 다음 스택에서 POP
https://www.cs.usfca.edu/~galles/visualization/StackArray.html
Stack을 시각적으로 볼 수 있는 사이트
Queue?
데이터를 삽입 시 큐의 끝에서 (tail) 데이터를 제거 시 큐의 맨 앞에서 (head)
Stack과 반대되는 개념으로 먼저 삽입한 데이터가 먼저 나오는 FIFO 혹은 LILO
데이터가 입력된 순서대로 처리할 때 주로 사용
예 ) 프린터에서 문서 출력
출력 버튼 클릭 시 인쇄 작업 큐에 삽입 -> 큐에 들어온 순서대로 인쇄
https://www.cs.usfca.edu/~galles/visualization/QueueArray.html
queue를 시각적으로 볼 수 있는 사이트
Stack 구현
class Stack {
constructor() {
this.storage = {};
this.top = -1; // 스택의 가장 상단을 가리키는 포인터 변수를 초기화 합니다.
}
size() {
return this.top + 1;
}
// 스택에 데이터를 추가 할 수 있어야 합니다.
push(element) {
this.top += 1;
this.storage[this.top] = element;
}
// 가장 나중에 추가된 데이터가 가장 먼저 추출되어야 합니다.
pop() {
// 빈 스택에 pop 연산을 적용해도 에러가 발생하지 않아야 합니다
if (this.size()<=0) {
return ;
}
const result = this.storage[this.top];
delete this.storage[this.top];
this.top -= 1;
return result;
}
}
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;
}
}
'자료구조&알고리즘' 카테고리의 다른 글
js로 이분탐색 구현 (1) | 2024.09.26 |
---|---|
자바스크립트로 DFS / BFS 완벽 정복하기 (1) | 2023.11.19 |
Stack 문제를 풀고 난 후 ,, (0) | 2023.05.10 |