1 minute read

스택 이란?


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());
        }
    }
}


Top