1. 큐란?
1) 개념
- 사전적 의미 : 무엇인가를 기다리는 줄
- 자료구조에서의 의미 : 무언가를 처리하기 위해 대기 중인 자료의 줄, 대기행렬이라고도 함
2) 특성
- FIFO(First-In First-Out) : 선입선출, 가장 먼저 들어간 데이터가 가장 먼저 나옴
3) 사용 예
- 선입선출 특성이 필요한 현실 세계의 다양한 시스템들을 나타낼 때 사용
- ex) 운영체제의 프린터 스풀러 (먼저 처리한 것부터 실행)
4) 구조
- 데이터를 차례대로 저장하는 선형 자료구조
- 새로운 데이터를 맨 뒤인 리어에 추가
- 리어(rear) : 큐에서 맨 나중에 추가한 데이터
- 맨 앞인 프런트에서 자료를 제거하여 반환
- 프런트(front) : 맨 먼저 추가한 데이터
- 인큐(enqueue) : 새로운 데이터를 추가하는 연산
- 큐의 크기 : 저장할 수 있는 최대 데이터의 개수 → 오버플로우 방지하기 위해 동적 메모리 사용을 권장
- 디큐(dequeue) : 기존 데이터를 반환하는 연산
- 프런트가 가리키고 있는 데이터 제거
- 피크(peek) : 가장 오래된 데이터 반환 (데이터 제거 X)
2. 추상 자료형 큐
이름 |
기능 |
입력 |
출력 |
설명 |
createQueue() |
큐 생성 |
큐의 크기 n |
큐 q |
빈 큐 q 생성 |
deleteQueue() |
큐 삭제 |
큐 q |
N/A |
큐 메모리 해제 |
isFull() |
자료 추가 가능 여부 판단 |
큐 q |
True/False |
큐에 인큐를 수행할 수 있는지 반환, 배열 큐인 경우에만 의미 있음 |
isEmpty() |
빈 큐인지 판단 |
큐 q |
True/False |
빈 큐인지 반환 |
enqueue() |
인큐 |
큐 q |
성공/실패 여부 |
큐의 맨 뒤에 새로운 자료 추가 |
dequeue() |
디큐 |
데이터 data |
데이터 |
큐의 맨 앞에 있는 자료 제거 후 반환 |
peek() |
피크 |
큐 q |
데이터 |
큐의 맨 앞에 있는 자료 반환 (큐에서 제거 X) |
3. 배열 선형 큐
1) 개념
- 배열로 구현한 선형 큐
2) 단점
- 미리 크기를 지정해야 함
- 배열의 앞부분부터 사용할 수 없는 빈 곳이 생김 (메모리 낭비)
→ 배열 원형 큐를 사용하거나 포인터로 구현한 연결 큐를 사용할 것을 권장
3) 구조
① enqueue()
- 조건식 1 : rear == maxCount – 1 (배열 선형 큐가 가득 찬 상태)
- 조건식 2 : currentCount == maxCount
② isFull()
- 현재 노드 개수 pQueue->currentCount가 최대 노드 개수 pQueue->maxCount와 같다면 배열 선형 큐가 가득 찬 상태
- 조건식 : pQueue->rear == pQueue->maxCount - 1
③ dequeue()
- pReturn->data = pQueue->pData[pQueue->front].data
④ isEmpty()
- 멤버 변수 currentCount의 값이 0이면 현재 큐가 비어 있는 상태
⑤ peek()
- 값을 삭제하지 않는다는 점이 dequeue와 다름
4. 배열 원형 큐
1) 개념
- 빈 노드가 있지만 인큐 연산이 불가능한 배열 선형 큐의 단점 보완
- 조건식 1 : rear = (rear+1) % maxCount
'2021-1 STUDY > Data Instructure Study' 카테고리의 다른 글
Week02_Stack (0) | 2021.04.07 |
---|---|
Week01_ArrayList (0) | 2021.03.30 |