오늘은 스택(STACK)과 QUEUE(큐)의 개념에 대해 알아보자 🥁
스택은 위의 사진처럼 같은 구조와 크기의 자료를 정해진 방향으로만 쌓을 수 있고 top으로 정한 곳을 통해서만 접근할 수 있다.
top에는 가장 위에 있는 자료는 가장 최근에 들어온 자료를 가리키고 삽입되는 새 자료는 top이 가리키는 자료 위에 쌓이며 삭제할 대도 top을 통해서만 가능하다.
여기서 top을 통해 삽입되는 연산을 push
, top을 통한 삭제하는 연산을 pop
이라고 한다.
따라서 스택은 시간 순서에 따라 자료가 쌓여서 가장 마지막에 삽입된 자료가 가장 먼저 삭제된다는 구조적 특징을 가지게 된다. 이러한 스택의 구조를 후입선출(LIFO, Last-In-First-Out) 구조이라고 한다.
예외처리 부분
Stack Underflow
라고 한다. Stack Overflow
Error가 발생한다개발자들의 지식인 사이트 Stack Overflow 이름도 이런 뜻을 가지고 있다.
출처: https://winplz.tistory.com/entry/자료구조스택과-큐-stack-and-queue [윈플]
정해진 한 곳(top)을 통해서만 삽입, 삭제가 이루어지는 스택
과 달리 큐
는 한쪽 끝에서 삽입 작업이, 다른 쪽 끝에서 삭제 작업이 양쪽으로 이루어 진다.
이때 삭제연산만 수행되는 곳을 프론트(front), 삽입연산만 이루어지는 곳을 리어(rear)로 정하여 각각의 연산작업만 수행된다.
이때, 큐의 리어에서 이루어지는 삽입연산을 인큐(enQueue) 프론트에서 이루어지는 삭제연산을 디큐(dnQueue)라고 부른다.
즉, 큐에서 프론트 원소는 가장 먼저 큐에 들어왔던 첫 번째 원소가 되는 것이며,
리어 원소는 가장 늦게 큐에 들어온 마지막 원소가 되는 것이다.
큐는 주로 데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용한다.
큐의 문제점은 일반적으로 배열을[1][2][3][4][5]
이런 직선 형태로 보왔을 때,
[Pop][2][3][4][5] 가장 오래기다린, 처음 들어온 [1]이라는 데이터가 Pop이 되면 다른 데이터들을 차례대로 땡겨주어야 한다.
( 소수의 자료의 경우는 상관이 없지만 많은 데이터의 경우 연산에 많은 시간이 걸린다. )
이런 문제를 해결하기 위해 나온 것이 원형 큐, 순환 큐 라고 불리는 방법이 있다