스택은 선형적 구조로써, 물건을 쌓아 올리듯 자료를 쌓아 올린 형태의 자료구조다.
LIFO(Last In First Out)으로, 마지막에 들어간 자료를 가장 먼저 꺼내는 방식이다.
자료가 없을 때 pop하는 오류를 stack underflow, 스택의 크기 이상의 자료를 push 하려고 할 때의 오류를 stack overflow라고 한다.
큐는 선형 구조로써, 스택과 달리 먼저 들어온 것이 먼저 나가는 선입선출로 FIFO의 구조를 가지고 있다.
큐의 뒤(rear)에서만 삽입 하고, 큐의 앞(front)에서는 삭제만 이루어진다.
스택은, top 을 통해서만 삽입, 삭제가 이루어졌었다. 하지만 큐는 삽입, 삭제가 다른 방향에서 이루어진다.
이때, 삭제 연산만 수행되는 곳을 프론트(front), 삽입 연산만 수행되는 곳을 리어(rear)라고 한다.
프론트(front)에서 이루어지는 삭제 연산을 디큐(dnQueue)라고 하며, 리어(rear)에서 이루어지는 삽입 연산을 인큐(enQueue) 라고 한다.
즉, 큐는 가장 먼저 삽입된 데이터가 가장 먼저 삭제된다는 특징을 가지게 되며, 이러한 큐의 구조를 선입선출(FIFO, First In FirstOut) 구조라고 한다.
선형 큐에서 삽입 및 삭제를 반복하다 보면, rear가 맨 마지막 인덱스를 가리키고, 앞에는 비어 있을 수 있지만 이를 꽉 찼다고 인식한다. 데이터를 삭제할 때마다 한칸 앞으로 이동시키는 것이 아니라 인덱스 단위로 큐의 연산을 진행했기 때문에 이러한 문제점이 생겨난다. 이러한 단점을 보완하기 위해 Circular Queue(원형 큐)가 생겨났다.