멋쟁이사자처럼/유니티 게임 개발 3기

[멋쟁이사자처럼 부트캠프 TIL 회고] 유니티 게임 개발 3기 12일차

MaterialStone 2024. 12. 4. 20:36
namespace UnityGameDevelopment.Day12 {
    public class Outline {
    	public static string Chapter1 = "스택";
    }
}

 

 

1. 스택

스택(Stack)은 데이터를 순서대로 저장하고 역순으로 데이터를 가져오는 자료 구조입니다. 링크드 리스트와 마찬가지로 노드 안에 데이터를 담고 노드끼리 연결해서 구현할 수 있습니다.

public class StackNode<T>
{
    public T data;
    public StackNode<T> Prev { get; set; }

    public StackNode(T data)
    {
        this.data = data;
    }
}

public class Stack<T> where T : new ()
{
    public StackNode<T> Top { get; set; }
}

 

스택은 데이터를 넣는 Push 함수와 데이터를 가져오는 Pop 함수, 가장 위의 데이터를 볼 수 있는 Peek 함수로 데이터를 관리합니다.

Push 함수

Push 함수는 데이터를 가진 노드를 스택의 제일 위에 추가합니다.

public void Push(T data)
{
    StackNode<T> newNode = new StackNode<T>(data);

    if (Top == null)
    {
        Top = newNode;
    }
    else
    {
        newNode.Prev = Top;
        Top = newNode;
    }
}

 

먼저 데이터를 담을 노드를 생성합니다. 스택이 비어있다면 제일 위의 노드를 새로 생성한 노드가 되도록 만듭니다. 스택이 차있다면 새로 생성한 노드를 제일 위의 노드에 연결하고 제일 위의 노드로 만듭니다.

Pop 함수

Pop 함수는 가장 위의 노드를 스택에서 꺼내옵니다.

public T Pop()
{
    StackNode<T> node = Top;

    if (Top == null)
    {
        return new ();
    }

    Top = Top.Prev;

    return node.data;
}

 

스택이 비어있다면 기본 생성자로 값을 반환하고, 스택이 차있다면 제일 위의 노드의 바로 아래 노드를 가리키도록 만듭니다.

Peek 함수

Peek 함수는 가장 위의 노드를 가져오지만 스택에서 꺼내지는 않습니다.

public T Peek()
{
    return Top == null ? new () : Top.data;
}

 

스택의 가장 위의 노드의 데이터를 가져오지만 스택이 비어있다면 데이터를 기본 생성자로 생성하여 반환하게 만들었습니다.

 


실습 및 응용

▶ 상태를 스택에 저장해서 Undo & Redo 구현하기