자료구조 중에서 Stack과 Queue, Deque이 있다. 이 세가지는 얼핏 비슷한 듯 보이면서도 엄연히 서로 다른 자료구조로, 주로 사용되는 분야나 문제도 다르다.
Stack이란, '쌓아 올린다'는 의미가 있다. 즉, 스택은 책을 쌓는 것처럼 차곡차곡 쌓아 올린 형태의 자료구조이다. 위의 이미지처럼 동일한 구조와 크기의 자료를 같은 방향으로만 쌓을 수 있다. 따라서, 자료를 넣을 수 있는 곳과 삭제할 수 있는 곳이 동일한 한 군데로 정해져있다. 이때, 삽입하는 연산을 'push', 삭제하는 연산을 'pop'이라 한다.
따라서, 스택은 가장 나중에 삽입된 자료가 가장 먼저 삭제된다. 이러한 구조를 후입선출(LIFO)이라고 한다.
Queue란, '무언가를 기다리는 사람이나 자동차 등의 줄' 혹은 '줄을 서서 기다리는 것'이라는 의미가 있다. 따라서, 큐는 스택과 달리 자료를 넣을 수 있는 곳과 삭제할 수 있는 곳이 각각 따로 존재한다.
따라서, 큐는 가장 먼저 삽입된 자료가 가장 먼저 삭제된다. 이러한 구조를 선입선출(FIFO)이라고 한다.
스택
특정 라이브러리는 없는 것 같고 그냥 기본 제공하는 리스트로 구현가능하다. append를 이용하면 자료가 맨 우측에 삽입되고 pop을 이용하면 맨 우측에 자료만 빼낼 수 있다.
큐와 덱
큐는 queue안에 Queue라는 것을 이용한다. from queue import Queue
를 이용해서 큐를 사용한다. Queue에서는 append와 pop대신 put과 get을 쓴다. 대신에 방향성이 없어 색인하면 에러가 난다.
이럴때는 collections안에 deque를 사용한다.from collections import deque
를 사용하여 덱을 사용한다. 방향성이 있기에 색인도 가능하고 append와 pop은 자료구조 우측에 삽입 / 삭제된다. appendleft와 popleft도 있는데 자료구조 좌측에 삽입 / 삭제된다.