스택(Stack)은 데이터를 후입선출(LIFO, Last-In First-Out) 방식으로 저장하는 자료구조다.
데이터는 들어간 순서대로 쌓이며, 마지막에 추가된 데이터가 먼저 제거된다.
ex) 탑처럼 쌓이는 구조
Stack<T> stack = new Stack<T>(); // T에 타입
데이터의 삽입 및 삭제가 빠르다. 삽입, 삭제 O(1)
연속적인 인덱스가 없으며,
특정 값을 찾기 위해서는 전체를 탐색해야 한다. 접근, 검색 O(n)
배열과 다르게 크기를 미리 할당할 필요가 없으며,
리스트처럼 자동으로 크기가 할당된다.
int로 설정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 순으로 출력
// 1, 2, 3, 4, 5 가 있는 상태
stack.Pop(); // 5 삭제
// 데이터가 있으면 제거
bool isPopped = stack.TryPop(out int result); // 4 삭제
int topValue = stack.Peek();
Console.WriteLine(topValue); // 3 출력
bool hasValue = stack.TryPeek(out int result2);
if (hasValue)
Console.WriteLine(result2); // 3 출력
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은 마치 유희왕 체인시스템 같네