스택(Stack)
싱글 링크드 리스트와 유사하지만, 스택은 tail 부터 시작함. 주로 실행취소,
돌아가기(컨트롤 z)등을 구현할 때 사용됨.

public class StackNode<T>{}
// 클래스의 이름은 StackNode 이며, 제네릭 타입 T을 사용했음
- public T data;
// 노드가 저장할 T 데이터
- public StackNode<T> prev;
// 이전 노드를 가리키는 참조
public class StackCustom<T> where T : new(){}
// 클래스의 이름은 StackCustom 이며, 제네릭 타입 T을 사용했음
- where T : new():
T는 기본 생성자를 가져야 한다는 제약 조건.
( where T : new() 가 없으면, 제네릭 타입 T를 사용하는 코드에서 기본 생성자(new T())
를 호출하려고 하면 컴파일 오류가 발생)
public StackNode<T> top;
// 스택의 최상단 노드를 가리키는 참조
public void Push(T data)
// 제네릭 타입 T데이터를(T data) 데이터를 스택에 추가하는 작업을 수행
var stackNode = new StackNode<T>();
// 새로운 노드를 생성해서 var stackNode 에 할당
stackNode.data = data;
// 노드에 데이터 저장
stackNode.prev = top;
// 현재 스택의 최상단(top)을 새로운 노드의 prev로 설정
top = stackNode;
// 새로운 노드(stackNode)를 스택의 최상단으로 설정

public T Pop()
// 스택의 최상단 데이터(top)를 제거하고 반환시키는 메서드
if (top == null)
// 스택이 비어 있으면(top == null) 하기의 코드를 실행.
- return new T()
// 제네릭 타입 T에 대해 기본 생성자를 호출하여 새로운 인스턴스를 생성
var result = top.data;
top = top.prev;
return result;
// 최상단 노드의 데이터(top.data;)를, 결과(result) 에 반환
// 최상단 노드를 이전 노드로 변경
public T Peek()
//스택에서 최상단에 있는 데이터(top)를 조회하는 함수
if (top == null)
// 스택이 비어 있으면(top == null) 하기의 코드를 실행.
- return new T()
// 제네릭 타입 T에 대해 기본 생성자를 호출하여 새로운 인스턴스를 생성
return top.data;
// 스택의 최상단 데이터를 반환

public bool AreBreaketBalanced(string expression)
// AreBreaketBalanced라는 메서드는 문자열(expression)을 입력받아,
그 안에 있는 괄호들이 짝이 맞는지 확인.
Stack<char> stack = new Stack<char>();
// Stack<char>는 문자형(char) 데이터를 저장하는 스택이며,
스택을 초기화시킴
foreach (char c in expression)
// expression 문자열의 각 문자를 순차적으로 확인
// foreach 반복문을 통해 expression에 포함된 각 문자를 하나씩 c라는 변수에 담아 반복
if (c == '(' || c == '[' || c == '{')
// c가 여는 괄호 '(', '[', 또는 '{' 중 하나인 경우 하기의 코드를 실행
{ stack.Push(c); }
// 스택에 그 문자를 push하여 넣음
else if (c == ')' || c == ']' || c == '}')
// c가 닫는 괄호 ')', ']', 또는 '}' 중 하나인 경우 하기의 코드를 실행
if (stack.Count == 0) return false;
// 스택이 비어 있다면(stack.Count == 0),
여는 괄호가 없다는 의미이므로 즉시 false를 반환( return false; )
char top = stack.Pop();
// 스택에서 최상단 노드를 제거하고( stack.Pop() ) 그 값을 반환
if ((c == ')' && top == '(') || (c == ']' && top == '[') || (c == '}' && top == '{'))
// 반환된 top 값과 현재 닫는 괄호 c를 비교하여 ture면 하기의 코드를 실행
return false;
// false 값을 반환하고, 함수를 종료시킴.
return stack.Count == 0;
// 문자열의 모든 문자를 순회한 후, 스택이 비어 있는지 확인
** 스택에 남아 있는 여는 괄호가 있다면, 해당 여는 괄호에 대한 짝이 맞는
닫는 괄호가 없었다는 의미이므로 false를 반환
** 스택이 비어 있다면 모든 괄호가 짝을 이룬 것이므로 true를 반환
'게임 개발(유니티) > 멋쟁이 사자처럼 3기_회고록' 카테고리의 다른 글
| [멋쟁이사자처럼 유니티 TIL] 2024_12_04(수) 강의 요약 및 정리(3) (0) | 2024.12.04 |
|---|---|
| [멋쟁이사자처럼 유니티 TIL] 2024_12_04(수) 강의 요약 및 정리(2) (0) | 2024.12.04 |
| [멋쟁이사자처럼 유니티 TIL] 2024_12_03(화) 강의 요약 및 정리(2)_단일 링크 리스트 (0) | 2024.12.03 |
| [멋쟁이사자처럼 유니티 TIL] 2024_12_03(화) 강의 요약 및 정리(1) (0) | 2024.12.03 |
| [멋쟁이사자처럼 유니티 TIL] 2024_12_02(월) 강의 요약 및 정리 (0) | 2024.12.02 |