스택(Stack)과 큐(Queue)에 대해 알아볼 것이다!
(스택과 큐도 결국 배열 위에 어떤 규칙을 설정한 모습이다.)
그러나 스택과 큐는 실제로 프로그래밍 언어들에서 존재하지 않는다. > 또한 스택과 큐는 자료구조가 스택 또는 큐로 구분되기 위한 규칙이라고 할 수 있다.
이러한 것을 '추상적 자료구조(ADT)' 라고 한다.
추상적 자료구조는 자료구조의 방법이 코드로 정의된 것이 아니라, 그 구조의 행동 양식만 정의된 것을 뜻한다.
즉 규칙만 이해한다면 스택과 큐라는 자료구조를 직접 만들 수 있다.
스택은 팬케이크 더미와도 같다.
새로운 팬케이크를 올리려면 위에 올리고, 팬케이크 더미를 줄이고 싶을 땐 맨 위에 있는 팬케이크부터 먹기 시작한다.
즉, 스택은 배열이 수직으로 쌓여있는 형태이다.
이 배열에서는 요소를 추가하거나 삭제할 때 맨 위에서부터 차례로 할 수 있다. 이러한 방식을 LIFO(Last In First Out)라고 한다.
큐는 줄을 서는 것과 같다.
버스를 기다리고 있을 때 줄 맨 앞에 서있는 사람이 가장 먼저 버스를 탄다. 줄 가장 뒤에서 기다린 사람은 버스도 가장 마지막에 타게 된다.
즉, 큐는 배열인데 가장 먼저 큐에 들어온 요소가 가장 먼저 큐에서 나가는 요소가 된다. 이러한 방식을 FIFO(First In First Out)라고 한다.
브라우저에서 뒤로가기 기능은 '스택' 자료구조를 쓰는 것이다.
뒤로가기를 누른다는 것은 웹페이지 히스토리 스택의 맨 위에서 한 페이지를 읽어오는 것이기 때문이다.
또한 문서 작성 중 Ctrl+Z를 통해 되돌리기 기능을 수행하는 것 역시 스택 자료구조를 활용하는 것이다.
이메일을 전송하거나 푸시 알림 기능, 혹은 쇼핑몰에서 주문을 처리하는 방식(선착순)은 '큐' 자료구조를 쓰는 것이다.
큐는 일상생활에 다양한 곳에서 쓰이는 자료구조라고 할 수 있다.