[Data Structure] 스택(Stack)
스택 이란?
Stack은 마지막에 들어온 데이터가 가장 먼저 나가는 구조인 LIFO(Last In First Out) 구조를 가진 자료구조입니다.
Stack에 데이터를 넣는 것을 “push”라고 하고, 데이터를 꺼내는 것을 “pop”이라고 합니다.
Stack의 특징
- 데이터는 한쪽 끝에서만 넣거나 뺄 수 있습니다.
- 데이터는 항상 가장 최근에 넣은 데이터가 가장 먼저 나옵니다.
사용하는 이유(용도)
- 스택은 LIFO 구조를 가지므로, 최근에 사용한 데이터를에 빠르게 접근해야 하는 경우에 적합합니다.
예를 들어, 재귀 함수의 호출 스택이나, 웹 브라우저의 뒤로 가기 버튼, 텍스트 편집기의 undo/redo 기능 등이 후입선출 구조를 따릅니다.
문제점&주의사항
- 데이터의 중간에 접근할 수 없기 때문에, 데이터의 순서를 잘 관리해야 합니다.
- Stack의 크기는 제한되어 있으므로, Stack이 가득 찼을 때의 처리를 고려해야 합니다.
예를 들어, Stack이 가득 찼을 때, 새로운 데이터를 삽입하지 못하도록 하거나, Stack을 비우는 등의 처리를 해야 합니다.
예제
C#에서는 Stack을 공식적으로 지원하지 않기 때문에 아래와 같이 System.Collections.Generic
를 추가해서 stack을 사용할 수 있습니다.
using System;
using System.Collections.Generic;
public class StackSample
{
public static void Main(string[] args)
{
// Stack<int> 생성
Stack<int> stack = new Stack<int>();
// 데이터 삽입
stack.Push(1);
stack.Push(2);
stack.Push(3);
// 데이터 삭제
int value = stack.Pop();
Console.WriteLine(value); // 3
value = stack.Pop();
Console.WriteLine(value); // 2
// 데이터 조회
value = stack.Peek();
Console.WriteLine(value); // 1
// Stack이 비어 있는지 확인
if (stack.Count == 0) {
Console.WriteLine("Stack is empty");
} else {
Console.WriteLine("Stack is not empty still have value : " + stack.Pop());
}
}
}