가장 일반적인 자료구조의 큐와 스택에 대해 알아보고 두 자료구조의 차이점도 알아보려고 합니다.
💡 스택 (STACK)이란?
스택의 개념
스택(stack)이란 쌓아 올린다는 것을 의미합니다. 따라서 스택 자료구조라는 것은 책을 쌓는 것처럼 차곡차곡 쌓아 올린 형태의 자료구조를 말합니다.
✔ 스택의 특징
스택은 위의 사진처럼 같은 구조와 크기의 자료를 정해진 방향으로만 쌓을 수 있고, top으로 정한 곳을 통해서만 접근할 수 있습니다.
top에는 가장 위에 있는 자료는 가장 최근에 들어온 자료를 가리키고 있으며, 삽입되는 새 자료는 top이 가리키는 자료의 위에 쌓이게 됩니다. 스택에서 자료를 삭제할 때도 top을 통해서만 가능하며 스택에서 top을 통해 삽입하는 연산을 'push' , top을 통한 삭제하는 연산을 'pop'이라고 합니다.
따라서 스택은 시간 순서에 따라 자료가 쌓여서 가장 마지막에 삽입된 자료가 가장 먼저 삭제된다는 구조적 특징을 가지게 됩니다.
이러한 스택의 구조를 후입선출(LIFO, Last-In-First-Out) 구조이라고 합니다.
비어있는 스택에서 원소를 추출하려고 할 때 stack underflow라고 하며, 스택이 넘치는 경우 stack overflow라고 한다. (그 유명한 사이트 "stack overflow" 의 이름이 여기서 유래된 것!)
세계 여러나라의 개발자들이 프로그래밍을 하다 막혔을 때, 또는 프로그래밍에 대한 질문을 하고 답변을 받는 사이트이다. 세계 여러 나라 개발자들이 모이는 곳으로 개발자 커뮤니티 중에선 가장 규모가 크며, 웬만한 질문들은 다 올라와 있어서 구글링을 하다 보면 매우 자주 볼 수 있는 곳이다.
✔ 스택의 활용 예시
스택의 특징인 후입선출(LIFO)을 활용하여 여러 분야에서 활용 가능합니다.
- 웹 브라우저 방문기록 (뒤로 가기) : 가장 나중에 열린 페이지부터 다시 보여줌.
- 역순 문자열 만들기 : 가장 나중에 입력된 문자부터 출력.
- 실행 취소 (undo) : 가장 나중에 실행된 것부터 실행을 취소.
- 후위 표기법 계산
- 수식의 괄호 검사 (연산자 우선순위 표현을 위한 괄호 검사)
💡 큐(QUEUE)란?
큐의 개념
Queue 의 사전적 의미는 1. (무엇을 기다리는 사람, 자동차 등의) 줄 , 혹은 줄을 서서 기다리는 것을 의미합니다.
따라서 일상생활에서 놀이동산에서 줄을 서서 기다리는 것, 은행에서 먼저 온 사람의 업무를 창구에서 처리하는 것과 같이
선입선출(FIFO, First in first out) 방식의 자료구조를 말합니다.
✔ 큐의 특징
정해진 한 곳(top)을 통해서 삽입, 삭제가 이루어지는 스택과는 달리 큐는 한쪽 끝에서 삽입 작업이, 다른 쪽 끝에서 삭제 작업이 양쪽으로 이루어집니다. 이때 삭제연산만 수행되는 곳을 프론트(front), 삽입 연산만 이루어지는 곳을 리어(rear)로 정하여 각각의 연산작업만 수행되는데 큐의 리어에서 이루어지는 삽입 연산을 인큐(enQueue) 프론트에서 이루어지는 삭제 연산을 디큐(dnQueue)라고 지칭합니다.
- 큐의 가장 첫 원소를 front / 가장 끝 원소를 rear
- 큐는 들어올 때 rear로 들어오지만 나올 때는 front부터 빠지는 특성
- 접근방법은 가장 첫 원소와 끝 원소로만 가능
- 가장 먼저 들어온 프론트 원소가 가장 먼저 삭제
즉, 큐에서 프론트 원소는 가장 먼저 큐에 들어왔던 첫 번째 원소가 되는 것이며, 리어 원소는 가장 늦게 큐에 들어온 마지막 원소가 됩니다.
✔ 큐의 활용 예시
큐는 주로 데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용합니다.
- 우선순위가 같은 작업 예약 (프린터의 인쇄 대기열)
- 은행 업무
- 콜센터 고객 대기시간
- 프로세스 관리
- 너비 우선 탐색(BFS, Breadth-First Search) 구현
- 캐시(Cache) 구현
'IT > Front-End' 카테고리의 다른 글
디바운싱(debouncing) vs 쓰로틀링(throttling) (0) | 2022.07.12 |
---|---|
OOP(객체 지향 프로그래밍) (0) | 2022.07.11 |
Get과 Post의 차이를 아시나요? (0) | 2022.07.08 |
메타(meta) 태그 종류 정리 (0) | 2022.06.16 |
브라우저의 역할과 스크립트의 로드 시점 (0) | 2022.06.15 |
제 블로그의 모든 글은 제가 직접 작성 하고 다른 글을 참고할 때는 이전 글보다 읽기 편하게 수정해서 작성하고 있습니다. 커피 한잔 사먹고 더 열심히 좋은글로 보답하겠습니다.
오늘도 제 블로그에 와 주셔서 감사합니다. :)