공부일지

Stack을 C#으로 - 특강 정리(작성중) 본문

코딩/C#

Stack을 C#으로 - 특강 정리(작성중)

이하택 2023. 10. 18. 10:11

스택이란

‘업보 스택 쌓는다.’ 라는 말로서 적어도 나에게는 친숙한 스택이라는 자료구조. 오늘은 이 친구를 알아보자.

스택, 영어로 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);
    }

어디에 사용할까?

  1. 텍스트 입력 창의 [Ctrl + Z]

  1. 팝업 창의 순서


Reference

스택이란? (Stack)
이번 글에서는 스택에 대해서 알아보겠습니다. 1. 스택의 개념· 메모리의 스택 영역은 함수의 호출과 관계되는 지역변수, 매개변수, 리턴 값등의 임시데이터를 저장합니다.· 스택이란 단어는 ‘차곡 차곡 쌓여진 더미’를 의미합니다.· LIFO(Last In First Out, 후입선출) 구조라고도 합니다. 2. 스택의 구조· 가장 먼저 저장되는 데이터는 스택의 아래 쪽(높은 주소)부터 쌓이고, 다음 저장되는 데이터가 바로 그 위(낮은 주소)에 쌓입니다. 이제부터 스택 영역에 새로운 데이터가 추가되고 사용되는 모습의 예를 살펴보겠습니다. 다음의 이 빈 통을 스택 영역이라고 생각합시다. 스택에 새로운 데이터를 추가하는 것을 PUSH라고 합니다.PUSH를 하면 기존 데이터 위에 새 데이터가 순서대로 쌓아집니다. 스..
https://cwjuns.tistory.com/18
내일배움캠프
국비지원 코딩, 내일배움캠프는 개발자 취업까지 자신 있습니다. 기간 제한 없는 취업 컨설팅을 받으며 비전공자 IT취업 준비, 확실히 끝내세요.
https://nbcamp.spartacodingclub.kr/game


Uploaded by N2T

'코딩 > C#' 카테고리의 다른 글

연산자  (0) 2023.10.25
제어문  (0) 2023.10.25
데이터 보관  (0) 2023.10.24
기본 자료형  (0) 2023.10.24
메모리 특강 내용 정리  (1) 2023.10.06