큐(Queue), 스택(Stack)은 자료 구조의 일종이다.

▶️ 큐(Queue)

자료의 입력과 출력을 한 쪽 끝(front, rear)으로 제한한 자료구조. FIFO(First In First Out)구조 put(), get()

한 쪽에서만 삽입과 삭제가 이루어졌던 스택과는 달리 한쪽에서는 삽입이 되고 다른 한쪽에서는 삭제 작업이 이루어지는 자료 구조이다. 가장 먼저 삽입된 자료가 가장 먼저 삭제되는 구조이므로 선입선출(FIFO: First In First Out)이라고도 부른다.

주로 데이터가 입력된 시간 순서대로 처리할 필요가 있는 상황에 이용한다.

예) 우선순위가 같은 작업예약(프린터의 인쇄 대기열), 프로세스 관리, 캐시(Cache)구현 등

이 구조는 계산대나 매표소에서 줄을 서서 기다리는 장면을 생각해보면 된다. 뒤에서부터 차례대로 줄을 서고 가장 먼저 줄을 선 사람이 가장 먼저 작업을 하고 빠지는 구조이기 때문이다.

Untitled


▶️ 스택(Stack)

Untitled

자료의 입력과 출력을 한 곳(방향)으로 제한한 자료구조.

LIFO(Last In First Out)구조

push(), pop()

call stack은 프로그램 상에서 어떤 순서로 작업을 수행하는지 기록하는 작업 스케쥴링과 관련된 자료 구조이다.

우리가 어떤 함수를 실행하게 되면 우리는 그 함수를 스택의 맨 위에 놓는데, 이것을 push라고 한다.

만약 함수가 어떤 값을 리턴 or 실행종료하면 다시 그 함수를 스택 맨 위에서부터 꺼내는데 이를 pop이라고 한다.

예) 웹브라우저 방문기록(뒤로가기), 역순 문자열 만들기, 실행취소 등이 있다.

이러한 구조로 함수가 호출되기 때문에 만약 잘못해서 무한 호출되는 재귀 함수를 실행시키면 스택에 함수 호출이 계속해서 쌓이다가 Maximum call stack size exceeded라는 에러 메시지를 만나게 된다.