오늘 과제로는 자료구조 중 stack 과 queue에 대해 정리해보는 시간을 가지라고하는데
진짜 너무 어려웠어.. 개념은 이해가 가지만 문제로 접했을 때 어떻게 코드를 써야하는지 어렵더라구
그래서 블로그 하기전에 외쳐보쟈!! 무야호~😱
쉽게 말해 브라우저상의 뒤로가기, 앞으로가기 기능을 연상시키면 된다고 해
접시를 포개서 쌓아놓은 듯한 구조의 형태인데 말 그대로 차례대로 쌓다보면 맨 첫번째에 쌓은 자료는 맨 마지막에 빼낼 수 있겠지? 그래서 이 자료구조를 LIFO(last in first out) FILO (first in last out)이라고 부르기도 해. 입출입이 하나인 제한적으로 접근할 수 있다는 특징이 있는거지!
사용 예시
const stack = new Stack();
stack.size(); // 0
for(let i = 1; i < 10; i++) {
stack.push(i); //(1,2,3,4,5,6,7,8,9)가 stack에 쌓이게 된다.
}
stack.pop(); // 9 > 제일 마지막에 쌓여있는 데이터 제거
stack.pop(); // 8 > 제일 마지막에 쌓여있는 데이터 제거
stack.size(); // 7 > (1,2,3,4,5,6,7)이 남아있음
stack.push(8); // > (1,2,3,4,5,6,7,8) 맨 마지막에 8을 추가
stack.size(); // 8
톨게이트를 연상시키면 되는데 처음 도착한 차가 제일 먼저 톨게이트를 빠져나가게되고, 맨 마지막에 도착한 자동차는 앞에 선 모든 자동차가 모두 빠져나가기 전까지 톨게이트를 빠져나갈 수 없지! 그러니깐 Queue는 자료(data)가 입력된 순서대로 처리해야 할 필요가 있는 상황에서 사용되지! like a Print!
Stack과 반대되는 개념으로, 먼저 들어간 자료(data)가 먼저 나오는 FIFO(First In First Out) 혹은 LILO(Last In Last Out) 의 특성을 가지고 있는 자료구조라고 보면 돼!
사용예시
const queue = new Queue();
queue.size(); // 0
for(let i = 1; i < 10; i++) {
queue.enqueue(i); //queue (1,2,3,4,5,6,7,8,9) 데이터가 쌓임
}
queue.dequeue(); // 1 > (2,3,4,5,6,7,8,9)
queue.dequeue(); // 2 > (3,4,5,6,7,8,9)
queue.size(); // 7 > 현재 queue의 사이즈는 7
queue.enqueue(10); // 10 데이터를 추가> (3,4,5,6,7,8,9,10)
queue.size(); // 8 > 10을 추가한 후 사이즈 8
queue.dequeue(); // 3 > (4,5,6,7,8,9,10)
queue.dequeue(); // 4 > (5,6,7,8,9,10)
queue.size(); // 6 > 현재 queue의 사이즈는 6
stack 은 뒤에서부터 데이터를 빼내오고
queue 는 앞에서부터 데이터를 빼내올 수 있다 okey?
알고리즘 코딩테스트 때 많이 사용된다고하니.. 열..열심히 공부하쟈..큽 😥