Stack

Clean·2025년 3월 29일

Stack

  • 스택(Stack)은 데이터를 후입선출(LIFO, Last-In First-Out) 방식으로 저장하는 자료구조다.

  • 데이터는 들어간 순서대로 쌓이며, 마지막에 추가된 데이터가 먼저 제거된다.
    ex) 탑처럼 쌓이는 구조


문법

Stack<T> stack = new Stack<T>(); // T에 타입

특징

  • 데이터의 삽입 및 삭제가 빠르다. 삽입, 삭제 O(1)

  • 연속적인 인덱스가 없으며,
    특정 값을 찾기 위해서는 전체를 탐색해야 한다. 접근, 검색 O(n)

  • 배열과 다르게 크기를 미리 할당할 필요가 없으며,
    리스트처럼 자동으로 크기가 할당된다.


예시

  • 타입은 임시로 int로 설정

데이터 추가 (Push)

Stack<int> stack = new Stack<int>(5);

stack.Push(1);
stack.Push(2);
stack.Push(3);
stack.Push(4);
stack.Push(5);

foreach (int i in stack)
{
    Console.WriteLine(i);
}
// 5 4 3 2 1 순으로 출력

데이터 삭제 (Pop, TryPop)

// 1, 2, 3, 4, 5 가 있는 상태
stack.Pop(); // 5 삭제

// 데이터가 있으면 제거
bool isPopped = stack.TryPop(out int result); // 4 삭제

마지막 데이터 확인 (Peek, TryPeek)

int topValue = stack.Peek();
Console.WriteLine(topValue); // 3 출력

bool hasValue = stack.TryPeek(out int result2);
if (hasValue)
    Console.WriteLine(result2); // 3 출력

DFS (깊이 우선 탐색)

  • DFS(Depth First Search, 깊이 우선 탐색)은 그래프 탐색 알고리즘 중 하나로,
    스택(Stack)을 활용하여 탐색을 진행한다.

  • 재귀함수 또는 스택을 사용하여 구현할 수 있으며,
    먼저 방문할 수 있는 깊은 곳까지 이동한 후 되돌아오는 방식으로 동작한다.

예시

Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
stack.Push(3);

while (stack.Count > 0)
{
    int current = stack.Pop();
    Console.WriteLine(current); // 3 > 2 > 1 순으로 출력
}

Stack은 마치 유희왕 체인시스템 같네

0개의 댓글