스택은 말그대로 쌓다라는 뜻으로 간단하게 데이터를 쌓아놓는다고 생각하면 된다. 예를 들어 박스를 일렬로 쌓아둘때 제일먼저 놓은 아래 박스는 제일 마지막으로 꺼낼수있듯이, 스택은 First In Last Out (FILO), 선입후출 자료구조이다.
Python 예제:
stack = []
stack.append(1)
stack.append(2)
stack.append(3)
stack.pop()
stack.append(4)
stack.append(5)
print(stack[::-1])
=> [5, 4, 2, 1]
위에 예제에서 볼수있듯이 1부터 3까지 차례로 쌓은뒤 pop()을 이용해 3을 뺀뒤 다시 4와 5를 쌓았다. 결과를 마지막부터 출력해 보면 마지막으로 넣은 5부터 처음으로 넣은 1 까지 출력된다.
큐는 스택괴 반대로 먼저들어간 데이터가 먼저 나오는 형식으로 First In First Out (FIFO), 선입선출이라고도 한다. 큐는 터널을 예로 들수있다. 일차선 터널이 있고 차량들이 차례데로 들어 간다고 하면 먼저들어간 차량이 먼저 나오게 된다.
Python 예제:
from collection import deque
queue = deque()
queue.append(1)
queue.append(2)
queue.append(3)
queue.popleft()
queue.append(4)
queue.append(5)
queue.append(6)
print(queue)
=>deque([2,3,4,5,6])
위와 같이 1부터 6까지 차례로 값들을 넣을때 중간에서 삭제를 하게되면 제일 먼저들어간 1이 삭제된다. 제일 먼저 들어간 값이 제일 먼저 나가게 되는 겄이다.
여기서 주의해야 할것은 deque 라이브러리를 사용한다는 것이다. 만약 deque 라이브러리를 사용하지 않으면 시간복잡도가 매우 비효율적 일 수 있다.