C#/자료구조 이해하기
C# 스택(Stack)에 대해 알아보자!
ForMan_
2024. 3. 5. 20:25

스택(Stack)이란?
- 스택(Stack)은 클래스이며, 데이터를 선입후출(FILO - First In Last Out) 또는 후입선출(LIFO - Last In First Out)의 순서로 저장하는 추상 자료형(ADT)입니다.
- 이는 스택에 데이터를 추가할 때 항상 맨 위에 추가되고, 데이터를 제거할 때는 맨 위에서 제거되는 구조를 의미합니다. 예를들어 컨테이너를 수직으로 한 줄로 쌓는 작업이라고 생각하시면 편할 것 같습니다.
- Stack은 System.Collections 네임스페이스에 정의되어 있습니다.
- 스택은 주로 함수 호출의 실행 컨텍스트를 관리하거나, 문제를 해결하는 과정에서 임시 데이터를 저장하거나 역순으로 데이터를 처리할 때 유용하게 사용됩니다.


스택(Stack)을 사용해보자!
1. Stack 생성
//비어있는 스택 생성.
Stack stack1 = new Stack();
//용량이 5인 스택 생성.
Stack stack2 = new Stack(5);
//list의 데이터 값이 저장된 스택 생성.
List<int> list = new List<int> { 10, 20, 30, 40, 50 };
Stack stack3 = new Stack(list);
//특정 데이터 형식을 저장할 수 있는 스택 생성.
Stack<int> stack4 = new Stack<int>();
2. Push() - 데이터 추가
- 후입선출이기 떄문에 역순으로 출력됩니다.
Stack stack = new Stack();
stack.Push("겁니다");
stack.Push("나올");
stack.Push("거꾸러");
foreach (var item in stack)
{
Debug.Log(item);
}

3. Pop() - 데이터 제거 및 반환
Stack stack = new Stack();
stack.Push("겁니다");
stack.Push("나올");
stack.Push("거꾸러");
//Pop()으로 맨 위의 값을 제거 후 그 제거한 값을 obj에 저장.
object obj = stack.Pop();
foreach (var item in stack)
{
Debug.Log(item);
}
Debug.Log("-----------------");
Debug.Log(obj);

4. Peek() - 맨 위 데이터 확인
Stack stack = new Stack();
stack.Push("겁니다");
stack.Push("나올");
stack.Push("거꾸러");
object obj = stack.Peek();
Debug.Log(obj);

5. Count - 해당 큐의 데이터 수
- 해당 스택의 카운트 즉, 몇 층짜리 건물인지 알 수 있습니다.
Stack stack = new Stack();
stack.Push("겁니다");
stack.Push("나올");
stack.Push("거꾸러");
int num = stack.Count;
Debug.Log(num);

6. Clear() - 모든 데이터 제거
- 스택을 Clear()를 씀으로써 해당 스택 속 값을 지구상에서 없애버릴 수 있습니다.
Stack stack = new Stack();
stack.Push("겁니다");
stack.Push("나올");
stack.Push("거꾸러");
stack.Clear();
Debug.Log(stack.Count);
