스택은 데이터가 쌓이는걸 처리하는 하나의 알고리즘 방식이다.
쉽게 생각하면 다음 그림과 같이 박스를 쌓고 꺼낼 때는 맨 위 에서 부터 꺼내듯
후입선출(Last In First Out : LIFO)의 방식이다. 예를 들어 우리가 페이지 뒤로 가기 버튼과 같은 기능들 또한 스택과 같은 형식으로 쌓이다가 뒤로 가기 버튼을 누르면 맨 마지막으로 봤던 페이지가 나오게 된다.
큐는 데이터가 쌓일 때 맨 처음으로 들어온 녀석이 맨 처음으로 빠져나가는 방식이다.
쉽게 생각하면 우리가 버스를 기다릴 때 맨 처음부터 기다린 사람이 맨 처음 버스를 타듯이
선입선출(First In First Out : FIFO)의 방식이다. 예를 들어 자바스크립트에서 이벤트 함수와 같은 비동기 함수들은 WEP API
가 처리하고 그 결과나 콜백 함수를 태스트 큐 자료구조에 넘겨주어 먼저 처리된 함수부터 다시 콜 스택으로 넘겨주는 방식이다.
스택구조 LIFO (JAVASCRIPT) 배열로 구현
function stack (){
let item = [];
this.push = function (a) { //아이템의 맨뒤에 요소추가
item.push(a);
}
this.pop = function (){ //아이템의 맨뒤에 요소제거 후 제거한 값 리턴
let last = item[item.length-1]
item.pop();
return last;
}
this.peek = function () { //아이템의 가장 마지막 요소 리턴
return item[item.length-1];
}
this.isempty = function () { //아이템이 비어있으면 true반환 아니면 false반환
return item[0] == undefined ? true : false
}
this.showstack = function () { //아이템 전체리턴
return item;
}
}
const new_stack = new stack();
new_stack.push(5);
new_stack.push(3);
new_stack.push(2);
new_stack.push(7);
new_stack.push(9);
console.log(new_stack.peek()); //9;
console.log(new_stack.pop()); //9;
console.log(new_stack.pop()); //7;
console.log(new_stack.showstack()) //[5,3,2];
큐구조 FIFO (JAVASCRIPT) 배열로 구현
function queue (){
let item = [];
this.enqueue = function (a) { //아이템의 맨뒤에 요소추가
item.push(a);
}
this.dequeue = function (){ //아이템의 맨뒤에 요소제거 후 제거한 값 리턴
let first = item[0]
item.shift();
return first;
}
this.first = function () { //아이템의 맨처음 요소 리턴
return item[0];
}
this.isempty = function () { //아이템이 비어있으면 true반환 아니면 false반환
return item[0] == undefined ? true : false
}
this.showqueue = function () { //아이템 전체리턴
return item;
}
}
const new_queue = new queue();
new_queue.enqueue(5);
new_queue.enqueue(3);
new_queue.enqueue(2);
new_queue.enqueue(7);
new_queue.enqueue(9);
console.log(new_queue.first()); //5;
console.log(new_queue.dequeue()); //5;
console.log(new_queue.dequeue()); //3;
console.log(new_queue.showqueue()) //[2,7,9];
스택,큐 자료구조 프로그래머스 문제들
https://school.programmers.co.kr/learn/courses/30/parts/12081