새소식

C#/Data Structure

[C# 자료구조] Stack, Queue

  • -

 여러 참고 자료들의 내용을 토대로 다시 재정리 및 인용한 내용과 기록을 담고 있습니다.
 가급적 모든 내용을 게임 개발 기술과 관련지어 설명하고 있습니다.
※ 자료의 출처는 문단 최하단에 표기되어 있으며, 관련된 정보를 찾으시거나 공부하시는 분들에게 도움이 되셨으면 좋겠습니다.


스택과 큐 (Stack, Queue)

 

  • Stack나중에 들어온 데이터가 먼저 나가는 후입선출 (LIFO) 방식
    (Push/Pop)
  • Queue먼저 들어간 데이터가 먼저 나가는 선입선출 (FIFO) 방식
    (Enqueue/Dequeue)
  • 두 자료구조 모두 데이터를 순서대로 입출력하기 때문에 순차적으로 처리하기에 용이함
    (중간 요소 삽입/삭제 불가)

(후입선출 구조 / 위키피디아 이미지)

 

(선입선출 구조 / 위키피디아 이미지)


선언 및 사용 방법

public class StackQueueExample
{
    Stack<int> cardNumberStack = new Stack<int>();

    public void Execute()
    {
        cardNumberStack.Push(1);
        cardNumberStack.Push(-30);
        cardNumberStack.Push(10);
        cardNumberStack.Push(3);
        
        Console.Write(cardNumberStack.Peek()); // 가장 먼저 나오게될 요소 반환

        int popCount = cardNumberStack.Count;
        for(int i = 0; i < popCount; i++)
        {
            Console.Write(cardNumberStack.Pop());
        }
    }

    // 최종 출력 결과
    // 3
    
    // 3
    // 10
    // -30
    // 1
}
public class StackQueueExample
{
    Queue<string> alertContextQueue = new Queue<string>();

    public void Execute()
    {
        alertContextQueue.Enqueue("경고 문구1");
        alertContextQueue.Enqueue("경고 문구2");
        alertContextQueue.Enqueue("경고 문구3");
        alertContextQueue.Enqueue("경고 문구4");

        Console.Write(alertContextQueue.Peek()); // 가장 먼저 나오게될 요소 반환

        int dequeueCount = alertContextQueue.Count;
        for(int i = 0; i < dequeueCount; i++)
        {
            Console.Write(alertContextQueue.Dequeue());
        }
    }
    
    // 최종 출력 결과
    // 경고 문구1

    // 경고 문구1
    // 경고 문구2
    // 경고 문구3
    // 경고 문구4
}

마무리

 

  • StackQueue는 인덱스를 통한 접근을 제공하지 않으며, 특정 원소에 접근하는 것이 불가능
    (오직 순차적 접근에 따라 처리 가능)
  • 두 자료구조 모두 데이터의 추가와 제거가 자주 발생하고, 순차 처리해도 문제가 없다면 사용하기에 적합
    (성능이 List에 비해 상대적으로 좋음)
  • 되돌리기/뒤로가기와 같은 기능을 구현한다면 Stack이 적합
  • 여러 이벤트/도전과제/대기열 관리와 같이 차례대로 처리가 필요한 기능을 구현한다면 Queue가 적합




※ 레퍼런스

스택과 큐의 자세한 설명 자료

참고자료1

참고자료2

참고자료3 (이미지 출처)

'C# > Data Structure' 카테고리의 다른 글

[C# 자료구조] LinkedList, SortedList  (0) 2021.10.11
[C# 자료구조] Hashtable, Dictionary  (0) 2021.10.03
[C# 자료구조] ArrayList, List  (0) 2021.09.20
[C# 자료구조] Array  (0) 2021.09.12
Contents

포스팅 주소 복사 완료