Stack / Queue
- 스택(Stack)과 큐(Queue)는 리스트(List) 자료구조입니다.
Stack 알아보기
- Stack은 쌓다, 쌓이다, 포개지다 와 같은 뜻을 가지고 있다.
- 데이터(data)를 순서대로 쌓는 자료구조이다.
Stack의 구조
원통을 자료구조 Stack, 구슬을 데이터(data)로 비유하면 구슬을 차례대로 원통에 넣었을 때 가장 나중에 넣은 구슬이 원통의 가장 상단에 있다.
그렇다면 구슬을 빼는 경우는 가장 나중에 넣었던 원통 상단에 위치한 구슬을 가장 먼저 뺄 수 있다.
아래 스택의 특징을 보면 이해가 될 것 이다.
- 스택의 특징은입력과 출력이 하나의 방향, 스택의 최상단에서만 이루어 지는 제한적 접근에 있다.
- Stack에 데이터를 넣는 것을 'PUSH', 데이터를 꺼내는 것을 'POP'이라고 한다.
Stack의 특징
1. LIFO(Last In First Out)
- 먼저 들어간 데이터는 제일 나중에 나오는 후입 선출의 구조
- 데이터를 저장하고 검색하는 프로세스가 매우 빠르다.
예1) 1, 2, 3, 4를 스택에 차례대로 넣습니다.
stack.push(데이터)
| 4 | <- top
| 3 |
| 2 |
| 1 |
들어간 순서대로, 1번이 제일 먼저 들어가고 4번이 마지막으로 들어가게 됩니다.
예2) 스택이 빌 때까지 데이터를 전부 빼냅니다.
stack.pop()
| |
| |
| |
| |
4, 3, 2, 1
제일 마지막에 있는 데이터부터 차례대로 나오게 됩니다.
2. 하나의 입출력 방향
- 데이터를 넣고 뺄 수 있는 곳은 스택의 가장 최상단뿐이다.
3. 데이터는 하나씩 넣고 빼기
- 스택에 한 개씩 여러 번 데이터를 넣어 스택 내부에 데이터가 여러 개 쌓여 있다고 하더라도,
데이터를 뺄 때는 스택의 가장 최상단에서 한 번에 한 개의 데이터만을 뺄 수 있다.
Stack 사용 예제
- 대표적으로 브라우저의 뒤로 가기, 앞으로 가기 기능을 구현시 사용한다.
- 순서
- 새로운 페이지로 접속할 때 Prev stack에 보관
- 뒤로가기 버튼을 눌러 이전 페이지로 돌아갈 때는 현재 페이지를 Next Stack에 보관, Prev stack에 가장 나중에 보관된 페이지를 현재 페이지로 가져옴
- 앞으로 가기 버튼을 눌러 앞에 방문한 페이지로 이동할 때는 Next Stack의 가장 마지막으로 보관된 페이지를 가져옴
- 마지막으로 현재 페이지를 Prev Stack에 보관
- 순서
Queue 알아보기
- 큐(Queue)는 줄을 서서 기다리다, 대기행렬이라는 뜻을 가지고 있다.
- Queue는 데이터(data)가 입력된 순서대로 처리할 때 주로 사용한다.
Queue의 구조
- Queue는 Stack과 반대되는 개념으로, 먼저 들어간 데이터(data)가 먼저 나오는
FIFO(First In First Out) 혹은 LILO(Last In Last Out)을 특징으로 가지고 있다. - 데이터를 입력할 시에는 큐의 끝에서(tail), 데이터를 출력할 때는 큐의 맨 앞에서(head) 진행된다.
- Queue에 데이터를 넣는 것을 'enqueue', 데이터를 꺼내는 것을 'dequeue'라고 함
Queue의 특징
1. FIFO (First In First Out)
- 먼저 들어간 데이터가 제일 처음에 나오는 선입선출의 구조
예1) 1, 2, 3, 4를 큐에 차례대로 넣습니다.
queue.enqueue(데이터)
출력 방향(head) <---------------------------< 입력 방향(tail)
1 <- 2 <- 3 <- 4
<---------------------------<
들어간 순서대로, 1번이 제일 먼저 들어가고 4번이 마지막으로 들어가게 됩니다.
예2) 큐가 빌 때까지 데이터를 전부 빼냅니다.
queue.dequeue(데이터)
출력 방향(head) <---------------------------< 입력 방향(tail)
<---------------------------<
1, 2, 3, 4
제일 첫 번째 있는 데이터부터 차례대로 나오게 됩니다.
2. 두 개의 입출력 방향
- Queue 자료구조는 데이터의 입력, 출력 방향이 다르다.
- 데이터를 입력할 때는 큐의 맨 끝(tail)으로만 입력이 가능하며 데이터를 출력할 때는 큐의 맨 앞(head)으로만 출력이 가능
- 입출력 방향이 같다면 Queue 자료구조라고 볼 수 없다.
3. 데이터는 하나씩 넣고 빼기
- 큐에 한 개씩 여러 번 데이터를 넣어 큐 내부에 데이터가 여러 개 쌓여 있다고 하더라도,
데이터를 뺄 때는 큐의 맨 앞에서 한 번에 한 개의 데이터만을 뺄 수 있다.
Queue의 사용 예제
- Queue는 컴퓨터에서도 광범위하게 활용된다.
- 프린터에서 여러 문서를 순서대로 인쇄할 때 사용된다.
- 컴퓨터와 프린터 사이의 데이터(data) 통신정리
- 일반적으로 프린터는 속도가 느림
- CPU는 프린터와 비교하여, 데이터를 처리하는 속도가 빠름
- CPU는 빠른 속도로 인쇄에 필요한 데이터(data)를 만든 다음, 인쇄 작업 Queue에 저장하고 다른 작업을 수행
- 프린터는 인쇄 작업 Queue에서 데이터(data)를 받아 들어온 순서대로 일정한 속도로 인쇄
'자료구조 \ 알고리즘 기법' 카테고리의 다른 글
[ 자료 구조 ] 이진트리 / 이진 탐색 트리 (0) | 2023.05.11 |
---|---|
[ 자료 구조 ] Tree / Graph (0) | 2023.05.11 |
[ 자료 구조 ] 자료 구조 살펴보기 (0) | 2023.05.10 |
[ 알고리즘 기법 ] 버블 정렬(bubble sort) 알고리즘 개념 정리 (0) | 2023.04.21 |
[ 알고리즘 기법 ] 재귀 함수 개념 / 재귀 알고리즘 기법 정리 (0) | 2023.04.14 |