스택(Stack)
데이터를 저장하고 관리하기 위한 자료 구조 중 하나.
스택은 후입선출(Last-In-First-Out, LIFO) 방식으로 동작하는 자료 구조로, 가장 최근에 추가한 항목이 가장 먼저 제거.
스택은 주로 메서드 호출, 임시 데이터 저장, 역추적 등 다양한 컴퓨팅 작업에 사용됨.
C#에서 Stack 사용 예제
using System; using System.Collections.Generic; class Program { static void Main() { // 정수형 데이터를 저장할 스택 생성 Stack<int> stack = new Stack<int>(); // 스택에 데이터 추가 stack.Push(1); stack.Push(2); stack.Push(3); // 스택에서 데이터 제거 및 출력 while (stack.Count > 0) { int item = stack.Pop(); Console.WriteLine(item); } } }
스택 구조를 직접 구현
MyStack 클래스 생성자 (MyStack(int capacity))
public MyStack(int capacity) { items = new T[capacity]; top = -1; // 스택이 비어있는 경우 top을 -1로 설정 }
생성자는 스택의 초기 용량(크기)를 받아와서 내부 배열을 할당
top 변수를 -1로 초기화하여 스택이 비어있음을 나타냄
Push 메서드 (Push(T item))
public void Push(T item) { if (top == items.Length - 1) { Console.WriteLine("스택이 가득 찼습니다."); } else { items[++top] = item; // top을 증가시키고 값을 저장 } }
Push 메서드는 스택에 항목을 추가하는 메서드
스택이 가득 차 있지 않으면 top을 증가시키고 해당 위치에 값을 저장
스택이 가득 차 있는 경우 메시지를 출력
Pop 메서드 (Pop())
public T Pop() { if (top == -1) { Console.WriteLine("스택이 비어있습니다."); return default(T); // 스택이 비어있으면 기본값 반환 } else { T poppedItem = items[top]; top--; // top을 감소시켜 항목 제거 return poppedItem; } }
Pop 메서드는 스택에서 최상위 항목을 제거하고 반환하는 메서드
스택이 비어있을 때 default(T)를 반환하여 예외를 방지
스택이 비어있지 않은 경우 top을 감소시키고 해당 위치의 값을 반환
Peek 메서드 (Peek())
public T Peek() { if (top == -1) { Console.WriteLine("스택이 비어있습니다."); return default(T); } else { return items[top]; } }
Peek 메서드는 스택에서 최상위 항목을 제거하지 않고 반환하는 메서드
스택이 비어있을 때 default(T)를 반환하여 예외를 방지
스택이 비어있지 않은 경우 top 위치의 값을 반환
Count 속성 (Count)
public int Count { get { return top + 1; } }
스택에 있는 항목의 수를 반환
top 변수 값에 1을 더해서 스택에 저장된 항목의 수를 계산
IsEmpty 속성 (IsEmpty)
public bool IsEmpty { get { return top == -1; } }
스택이 비어있는지 여부를 반환
top 변수가 -1일 때 스택이 비어있음을 나타냄