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 네임스페이스에 정의되어 있습니다.

  • 스택은 주로 함수 호출의 실행 컨텍스트를 관리하거나, 문제를 해결하는 과정에서 임시 데이터를 저장하거나 역순으로 데이터를 처리할 때 유용하게 사용됩니다.

<출처: https://blog.kakaocdn.net/dna/oLNir/btrjWUaqG6V/AAAAAAAAAAAAAAAAAAAAAED1ouHGtrA4zvlGadmkfM5vnp7YqTkjLfRZbC58PDFl/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=u1QPKaGgIVjBtVmarrKzdfFVrag%3D>


스택(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);