스택이란
‘업보 스택 쌓는다.’ 라는 말로서 적어도 나에게는 친숙한 스택이라는 자료구조. 오늘은 이 친구를 알아보자.
스택, 영어로 Stack은
위와 같이 어떠한 것들이 무더기로 쌓여 있는 것을 의미한다.
자료구조에서도 이와 유사한 역할을 진행한다.
스택의 구조
Stack을 배열로 어떻게 만들까?
배열 안에 아무 데이터도 없으니 현재 index는 -1로 설정!
스크립트로 구현해보자
초기
MyStack.cs
public class MyStack { private int[] arr; private int index; public int Size; public MyStack(int size) { Size = size; arr = new int[size]; index = -1; } //추가 public void Push(int data) { if(IsFull()) { throw new Exception(“Stack is Full”); } arr[++index] = data; } //삭제 - 추출 public int Pop() { if(IsEmpty()) { //강제로 오류라고 시스템에 알림 throw new Exception(“Stack is Empty”); } return arr[index--]; } //체크 public int Peek() { if(IsEmpty()) { //강제로 오류라고 시스템에 알림 throw new Exception(“Stack is Empty”); } return arr[index]; } //비어있는지 체크 public bool IsEmpty() { return ( index == -1 ); } //꽉 찼는지 체크 public bool IsFull() { return (index == Size); } }
GameManager.cs
public class GameManager : MonoBehaviour { void Start() { MyStack stack = new MyStack(5); stack.Push(10); stack.Push(20); stack.Push(30); stack.Pop(); stack.Pop(); stack.Pop(); stack.Pop(); } }
Result
30 20 10 Stack is Empty
제네릭 처리
MyStack.cs
private int index; public int Size; public MyStack<T> { Size = size; arr = new T[size]; index = -1; } //추가 public void Push(T data) { arr[++index] = data; } //삭제 - 추출 public T Pop() { if(IsEmpty()) { //강제로 오류라고 시스템에 알림 throw new Exception(“Stack is Empty”); } return arr[index--]; } //체크 public T Peek() { if(IsEmpty()) { //강제로 오류라고 시스템에 알림 throw new Exception(“Stack is Empty”); } return arr[index]; } //비어있는지 체크 public bool IsEmpty() { return ( index == -1 ); } //꽉 찼는지 체크 public bool IsFull() { return (index == Size); }
어디에 사용할까?
- 텍스트 입력 창의 [Ctrl + Z]
- 팝업 창의 순서
Reference
Uploaded by N2T