[Computer Science] Stack VS Queue

HyungJin Han·2023년 2월 7일
0

Computer Science

목록 보기
1/10

1. Stack (LIFO)

1-1. Stack의 개념

1-1-1. 스택(Stack)이란?

쌓아 올린다는 것을 의미하며, 스택 자료구조라는 것은 책을 쌓는 것처럼 차곡차곡 쌓아 올린 형태의 자료구조를 말한다.

1-2. Stack의 특징

스택은 위의 사진과 같이 구조와 크기의 자료를 정해진 방향으로만 쌓을 수 있고, Top으로 정한 곳을 통해서만 접근할 수 있다.
Top에는 가장 위에 있는 자료는 가장 최근에 들어온 자료를 가리키고 있으며, 삽입되는 새 자료는 top이 가리키는 자료의 위에 쌓인다.
스택에서 자료를 삭제할 때도 Top을 통해서만 가능하다.
스택에서 Top을 통해 삽입하는 연산을 push, Top을 통한 삭제하는 연산을 pop이라고 한다.

따라서 스택은 시간 순서에 따라 자료가 쌓여서 가장 마지막에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO, Last-In-First-Out)의 구조를 갖고 있다.

비어있는 스택에서 원소를 추출하려고 할 때, stack underflow라고 하며, 스택이 넘치는 경우, stack overflow라고 한다.

여기서 유래된 사이트가 바로 Stack Overflow 사이트이다.
프로그래밍을 하며 궁금한 것, 막히는 것은 거의 모두 들어있다고 생각해도 과장이 아닌
코딩계의 지식인 느낌.

1-3. Stack의 활용

스택의 특징인 후입선출을 활용하여 여러 분야에서 활용이 가능한데,

  • 웹 스라우저 방문기록 (뒤로가기) : 가장 나중에 열린 페이지부터 다시 보여줌
  • 역순 문자열 만들기 : 가장 나중에 입력된 문자부터 출력
  • 실행 취소 (undo) : 가장 나중에 실행된 것부터 실행을 취소
  • 후위 표기법 계산
  • 수식의 괄호 검사 : 연산자 우선순위 표현을 위한 괄호 검사

등의 활용이 있다.

1-4. Stack의 장단점

  • Top 을 통해 접근하기 때문에 데이터 접근, 삽입, 삭제가 빠르다
  • Top 위치 이외의 데이터에 접근할 수 없기 때문에 탐색이 불가능하다. 탐색하려면 모든 데이터를 꺼내면서 진행해야 한다.

2. Queue (FIFO)

2-1. Queue의 개념

큐(Queue)란?

사전적인 의미로는 (무엇을 기다리는 사람, 자동차 등의) 줄, 혹은 줄을 서서 기다리는 것을 의미하며, 일상 생활에서 줄을 서서 기다리거나, 먼저 온 사람의 업무를 처리해주는 것과 같이 선입선출(FIFO, First-In-First-Out) 방식의 자료구조를 말한다.

2-2. Queue의 특징

정해진 한 곳(Top)을 통해서 삽입, 삭제가 이루어지는 스택과는 달리, 큐는 한쪽 끝에서 삽입 작업이, 다른 쪽 끝에서는 살제 작업이 양쪽으로 이루어진다.
이때 삭제 연산만 수행되는 곳을 프론트(front), 삽입 연산만 이루어지는 곳을 리어(rear)로 정하여 각각의 연산 작업만 수행된다.
이때, 큐의 리어에서 이루어지는 삽입 연산을 인큐(enQueue), 프론트에서 이루어지는 삭제 연산을 디큐(dnQueue)라고 한다.

  • 큐의 가장 첫 원소를 front / 가장 끝 원소를 rear
  • 큐는 들어올 때 rear로 들어오지만 나올때는 front부터 빠지는 특성
  • 접근방법은 가장 첫 원소와 끝 원소로만 가능
  • 가장 먼저 들어온 프론트 원소가 가장 먼저 삭제

즉, 큐에서 프론트 원소는 가장 먼저 큐에 들어왔던 첫 번째 원소가 되는 것이며, 리어 원소는 가장 늦게 큐에 들어온 마지막 원소가 된다.

2-3. Queue의 활용

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

  • 우선순위가 같은 작업 예약 (프린터의 인쇄 대기열)
  • 은행 업무
  • 콜센터 고객 대기시간
  • 프로세스 관리
  • 너비 우선 탐색(BFS, Breadth-First Search) 구현
  • 캐시(Cache) 구현

2-4. Queue의 장단점

  • 데이터 접근, 삽입, 삭제가 빠르다.
  • 큐 역시 스택과 마찬가지로 중간에 위치한 데이터에 대한 접근이 불가능하다.

두 자료구조를 비교하여 하나만 사용하기보다는 활용 방안에 따라서 적절한 자료구조를 선택하여 사용하는 것이 최고로 좋은 프로그래밍인 것 같다.

profile
토끼보다는 거북이처럼 꾸준하게

0개의 댓글