큐(Queue)는 선입선출(First in First Out)구조로 먼저 추가된 요소가 먼저 제거되는 데이터 구조이다.
그림처럼 들어왔다가 들어온 순서대로 나가는 구조임.
큐의 멤버 함수
- Enqueue : 요소를 큐의 맨 뒤에 추가한다.
- Dequeue : 큐의 맨 앞에 있는 요소를 제거하고 반환한다.
장점:
- 들어온 순서를 유지하기 때문에 순서에 따라 처리하는 작업에 유용하다.(ex.롤 대기열)
- 큐는 크기가 제한되지 않기 때문에 동적으로 크기가 조정 가능하다.
단점:
- 큐가 커질수록 요소를 추가하거나 제거하는 데에 시간이 걸릴 수 있다.
using System;
namespace QueueImplementation
{
public class Queue<T>
{
private const int MAX_SIZE = 3; // 큐의 최대 크기
private T[] values; // 큐의 요소를 저장하는 배열
private int head; // 큐의 맨 앞을 가리키는 인덱스
private int tail; // 큐의 맨 뒤를 가리키는 인덱스
// 큐 클래스의 생성자
public Queue()
{
values = new T[MAX_SIZE]; // 배열 초기화
head = 0; // 큐의 맨 앞 초기화
tail = -1; // 큐의 맨 뒤 초기화
}
// 큐가 비어 있는지 여부를 확인하는 메서드
public bool IsEmpty()
{
return head > tail; // head가 tail보다 크면 큐가 비어 있음
}
// 큐가 가득 찼는지 여부를 확인하는 메서드
public bool IsFull()
{
return tail == MAX_SIZE - 1; // tail이 배열의 최대 인덱스와 같으면 큐가 가득 참
}
// 큐에 요소를 추가하는 메서드
public void Enqueue(T val)
{
if (IsFull())
{
Console.WriteLine("오버플로우."); // 큐가 가득 찬 경우 오버플로우 메시지 출력
return;
}
tail++; // tail을 한 칸 뒤로 이동
values[tail] = val; // tail 위치에 요소 추가
}
// 큐에서 요소를 제거하고 반환하는 메서드
public T Dequeue()
{
if (IsEmpty())
{
Console.WriteLine("언더플로우"); // 큐가 비어 있는 경우 언더플로우 메시지 출력
return default(T); // 기본값 반환
}
T val = values[head]; // head 위치의 요소를 val에 저장
head++; // head를 한 칸 앞으로 이동
return val; // 제거된 요소 반환
}
}
internal class Program
{
private static void Main()
{
Queue<int> myQueue = new Queue<int>(); // 정수형 큐 생성
myQueue.Enqueue(10); // 큐에 요소 추가
myQueue.Enqueue(20);
myQueue.Enqueue(30);
// 큐에서 요소를 제거하고 출력
Console.WriteLine(myQueue.Dequeue()); // 10
Console.WriteLine(myQueue.Dequeue()); // 20
Console.WriteLine(myQueue.Dequeue()); // 30
}
}
}
'C#은 처음이라' 카테고리의 다른 글
C# 트리,이진탐색트리(bst) (0) | 2024.03.14 |
---|---|
C# 리스트(List) (0) | 2024.03.13 |
C# 자료구조(스택) (0) | 2024.03.12 |
C# 이벤트(Event)와 델리게이트(Delegate) (0) | 2024.03.11 |
C# 일반화(Generic) (1) | 2024.03.08 |