Stack은 데이터를 순서대로 쌓는 자료구조다. 예를 들어 프링글스처럼 최상단을 먼저 뺄 수 있는 구조다. 이를 후입선출, 영어로 LIFO(Last In First Out)이라 한다.
//예1) 1, 2, 3, 4를 스택에 차례대로 넣습니다.
stack.push(데이터)
| 4 | <- top
| 3 |
| 2 |
| 1 |
//들어간 순서대로, 1번이 제일 먼저 들어가고 4번이 마지막으로 들어가게 됩니다.
//예2) 스택이 빌 때까지 데이터를 전부 빼냅니다.
stack.pop()
| |
| |
| |
| |
4, 3, 2, 1
//제일 마지막에 있는 데이터부터 차례대로 나오게 됩니다.
Stack 자료구조는 경로가 최상단 한 곳이기 때문에 데이터를 하나씩 넣고 뺄 수 있다.
Stack은 브라우저의 뒤로 가기, 앞으로 가기 기능에 사용된다.
const stack = new Stack(); // Stack은 사전에 정의된 것으로 가정합니다.
stack.push(1);
stack.push(2);
console.log(stack.pop());
stack.push(3);
console.log(stack.pop());
stack.push(4);
console.log(stack.pop());
console.log(stack.pop());
// 2, 3, 4, 1
Queue는 톨게이트로 예를 들 수 있다. 가장 먼저 진입한 차가 먼저 톨게이트를 나가고 이후 순서대로 나가는 구조다. 이처럼 먼저 들어간 데이터가 제일 처음에 나오는 선입선출, 영어로 FIFO(First In First Out)구조로 되어있다.
//예1) 1, 2, 3, 4를 큐에 차례대로 넣습니다.
queue.enqueue(데이터)
출력 방향(head) <---------------------------< 입력 방향(tail)
1 <- 2 <- 3 <- 4
<---------------------------<
//들어간 순서대로, 1번이 제일 먼저 들어가고 4번이 마지막으로 들어가게 됩니다.
//예2) 큐가 빌 때까지 데이터를 전부 빼냅니다.
queue.dequeue(데이터)
출력 방향(head) <---------------------------< 입력 방향(tail)
<---------------------------<
1, 2, 3, 4
//제일 첫 번째 있는 데이터부터 차례대로 나오게 됩니다.
Queue는 두개의 입출력 방향을 가지고있다. 데이터를 입력할 경우 맨 끝(tail)으로만 입력, 데이터를 출력할 경우 맨 앞(head)으로만 출력이 가능하다.
Queue는 데이터를 하나씩 넣고 뺄 수 있다.
순차적으로 진행해야하는 것들 중 하나가 프린트다. Queue에 들어온 순서대로 출력하지 않으면 인쇄물이 섞일 것이다.
const queue = new Queue(); // Queue는 사전에 정의 된 것으로 가정합니다.
queue.enqueue(1);
queue.enqueue(2);
console.log(queue.dequeue());
queue.enqueue(3);
console.log(queue.dequeue());
queue.enqueue(4);
console.log(queue.dequeue());
console.log(queue.dequeue());
// 1, 2, 3, 4