큐(Queue)란?
- 큐는 클래스이며, 선입선출(FIFO - First In First Out)방식으로 데이터를 저장하는 자료 구조입니다.
- 큐는 데이터를 추가할 떄는 항상 뒤쪽에 추가되고, 데이터를 제거할 때는 항상 앞쪽에서 제거됩니다.
- 큐를 사용하기 위해선 using.System.Collections; 를 추가해줘야 합니다.
- List와 같이 크기가 자동으로 늘어나며, 데이터 타입이 서로 다른 값을 추가할 수 있습니다.
<출처: https://blog.kakaocdn.net/dn/uMiOJ/btreKJ5Os5T/AtMSDo5vWJATJQWYxLIKSk/img.png>
Queue클래스를 사용해보자!
1. Queue 생성
Queue queue = new Queue(); //특정한 데이터 타입을 가지지 않은 큐.
Queue<int> intQ = new Queue<int>(); //int형 데이터 타입을 가진 큐.
Queue<string> stringQ = new Queue<string>(); //string형 데이터 타입을 가진 큐.
2. Enqueue() - 데이터 추가
- Enqueue(추가하고 싶은 데이터 값)는 해당 큐에 괄호 안의 데이터가 Enqueue()를 호출한 순서대로 저장됩니다.
- 중간에 또 다른 값을 추가할 수 없습니다.
Queue queue = new Queue();
//queue에 따로 데이터를 정하지 않았기 때문에 서로 다른 데이터 값 추가 가능.
queue.Enqueue(1);
queue.Enqueue("2번째");
queue.Enqueue('c');
3. Dequeue() - 데이터 제거 및 반환
- Dequeue()를 호출한 수만큼 해당 큐의 맨앞 데이터부터 제거됩니다. 단, 해당 큐의 데이터 값의 수보다 Dequeue()의 호출 수가 많다면 에러가 나옵니다.
- 중간값을 먼 제거하거나 반환할 수 없습니다.
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue("2번째");
queue.Enqueue('c');
foreach (var item in queue)
{
Debug.Log(item);
}
Debug.Log("----------");
Debug.Log(queue.Dequeue()); //맨앞의 값만 제거 후 반환.
4. Peek() - 맨 앞의 데이터를 제거하지 않고 반환
- Peek()는 해당 큐의 맨 앞의 값을 가져오고는 싶은데 제거하기는 싫을 때 사용하는 매서드입니다.
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue("2번째");
queue.Enqueue('c');
object obj = queue.Peek();
Debug.Log(obj);
Debug.Log("--------------");
foreach (var item in queue)
{
Debug.Log(item);
}
5. Count 속성 - 큐에 있는 데이터의 수 반환
- List와 같이 Length가 아니라 Count로 해당 큐의 방의 개수를 알 수 있습니다.
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue("2번째");
queue.Enqueue('c');
int num = queue.Count;
Debug.Log(num);
6. Contains - 특정 데이터의 존재 여부 확인
- 찾고자 하는 값이 해당 큐에 존재하는지 bool값(true or false)으로 반환되는 매서드입니다.
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue("2번째");
queue.Enqueue('c');
Debug.Log(queue.Contains('c'));
Debug.Log(queue.Contains("C#"));
7. Clear() - 모든 데이터 제거
- 100만개의 데이터 값을 가진 큐도 Clear()매서드 한 방이면 빈 껍데기로 만들 수 있습니다.
Queue queue = new Queue();
for (int i = 0; i < 1000000; i++)
{
queue.Enqueue(i);
}
Debug.Log(queue.Count);
queue.Clear();
Debug.Log(queue.Count);
'C# > 자료구조 이해하기' 카테고리의 다른 글
C# 오름차순과 내림차순 정렬에 대해 알아보자! (0) | 2024.03.10 |
---|---|
C# List(리스트)에 대해 알아보자! (0) | 2024.03.10 |
C# Dictionary에 대해 알아보자! (0) | 2024.03.05 |
C# 스택(Stack)에 대해 알아보자! (0) | 2024.03.05 |
C# 배열(Array)을 알아보자! (2) | 2024.03.05 |