큐는 들어간 순서 그대로 출력되는 선입 선출의 형태를 가진 자료구조이다.
그대로 직역하면 대기줄이라는 번역이 되는데, 당연히 대기줄은 먼저 온 순서대로 진행이 된다.
데이터가 들어와서 자료구조에 입력되는 위치는 뒤인데, 이것은 Rear 또는 Back이라고 한다.
데이터가 나가는 위치는 앞으로, Front라고 한다.
우선순위 큐, 원형 큐 등의 다양한 파생 형태도 존재한다.
- 순차 큐
- 1차원 배열을 이용한 큐이다.
- 큐의 크기는 배열의 크기이다.
- front는 저장된 첫 번째 원소 - 1의 인덱스를 저장한다.
- rear는 저장된 마지막 원소의 인덱스를 저장한다.
- 상태 표현은 이런 식이다 :
- 초기 상태 : front = rear = -1
- 공백 상태 : front = rear
- 포화 상태 : rear = n - 1 (n : 배열의 크기, n - 1 : 배열의 마지막 인덱스)
- 즉, 이런 식의 식을 알고 있다면 직접 구현하는데 직관적인 작성을 할 수 있다.
- 순차 큐의 고질병
- 순차 큐의 잘못된 포화상태 인식
- 큐에서 삽입-삭제를 반복하는 경우 큐 안의 아이템은 점점 뒤쪽으로 밀린다. 하지만 앞에서 이야기한 포화 상태인 rear = n - 1에 도달하므로 더 이상의 삽입을 수행하지 못하게 된다.
- 그럼 어쩌자고요??
- 방법 1. 저장된 원소들을 배열의 앞부분으로 이동시킨다.
- 순차자료에서의 이동 작업은 연산이 복잡하기 때문에 효율성이 떨어진다.
- 방법 2. 1차원 배열을 사용 하되, 논리적으로 배열의 처음과 끝이 연결되어 있다고 추상화하고 사용해본다.
- 이 방법은 원형 큐를 이야기하기도 한다.
- 방법 1. 저장된 원소들을 배열의 앞부분으로 이동시킨다.
- 그럼 어쩌자고요??
- 큐에서 삽입-삭제를 반복하는 경우 큐 안의 아이템은 점점 뒤쪽으로 밀린다. 하지만 앞에서 이야기한 포화 상태인 rear = n - 1에 도달하므로 더 이상의 삽입을 수행하지 못하게 된다.
- 순차 큐의 잘못된 포화상태 인식
- 1차원 배열을 이용한 큐이다.
- 원형 큐
- 원형 큐의 초기 공백 상태는 front = rear = 0 이다.
- front 와 rear의 위치가 배열의 마지막 인덱스인 n - 1에서, 논리적 다음 위치인 0번 이동을 위해 나머지 연산자를 사용해야 한다.
- 3 % 4 = 3
종류 | 삽입 위치 | 삭제 위치 |
순차 큐 | rear = rear + 1 | front = front + 1 |
원형 큐 | rear = (rear + 1) mod n | front = (front + 1) mod n |
- 공백 상태와 포화 상태 구분을 쉽게 하기 위해, front가 위치한 자리는 항상 빈자리로 두게 끔 한다.
연결 리스트 형태의 큐, 쌍방향 입력-출력이 가능한 deQue도 있다. 천천히 다루겠다.
'별 잡다' 카테고리의 다른 글
Linked List : 연결 리스트 & Array (0) | 2025.03.28 |
---|---|
Hash (0) | 2025.03.28 |
스택 : Stack (0) | 2025.03.25 |
짤짤이 알고리즘 특강 (0) | 2025.03.21 |
분할 정복 : Divide and Conquer (0) | 2025.03.21 |