인강/패스트캠퍼스_환급챌린지

[패스트캠퍼스 챌린지 25일차] 문제 풀이로 실전 응용력을 다지는 필수 자료구조

맙소사 2021. 9. 30. 11:28

 

Ch 01. 선형자료구조 - 06. 스택(Stack)

 

쌓는 형태, 후입선출의 구조를 가진 자료구조! LIFO ( Last-In-First-Out )라고 많이 말한다.

 

가장 많이 사용되는곳으로는 휴대폰 앱의 화면 이동 방식, 브라우저의 뒤로가기 그리고 Ctrl + Z (실행취소)가 있다.

 

push와 pop을 사용해서 데이터를 관리한다.

top은 항상 최상단에 저장된 데이터를 가리킨다.

Stack은 한번에 한 개의 데이터만 꺼내올 수 있다.

 

Push(Data)는 자료를 삽입할 때 사용함.

저장공간이 초과되었을 경우 Ovarflow가 발생함.

Overflow를 막기 위해서 IsFull()을 사용해서 공간이 찼는지 아닌지 체크할 수 있음.

 

Pop()은 자료형을 꺼내는 친구. 항상 top에 위치한 데이터가 하나씩 나온다.

저장공간이 완전히 비어있을 경우 Underflow가 발생하기 때문에 IsEmpty()를 사용해서 데이터의 유무를 확인할 수 있음.

 

Peek()은 최상단 데이터를 가져오는 방식이지만 데이터를 제거하지 않고 해당 값 만을 반환해줌.

 

이하와 같은 방식으로 구현을 할 수 있다. 스택의 내부 구조를 익히는데 도움이 됨!

ArrayStack arrayStack = new ArrayStack(5);

Class ArrayStack
{
	private int[] m_space;
    private int m_top;
    public int count;
    
    public ArrayStack(int size)
    {
    	m_space = new int[size];	//들어오는 값으로 스택의 사이즈를 결정함
        m_top = -1; 				//가장 처음에는 비어있기 때문에 최상단 데이터가 -1임
    }
	
    public void Push(int value)
    {
    	m_top++;
    	m_space[m_top]= value;
    }
    
    public int pop()
    {
    	int value = m_space[m_top];
        m_space[m_top] = 0;
        m_top--;
        return value;
    }
    
    public bool IsEmpty(){...}
    
    public bool IsFull() 
    {
    	return m_top == m_space.Length - 1; 
    }   
}

 

기본 닷넷에서 제공하는 스택을 사용할 때는 아래와 같은 형태로 스택을 선언할 수 있다. 꼭 제네릭 타입을 사용할 것!

//제네릭 타입이 아닌 Stack (어떠한 데이터도 전부 다 넣을 수 있으나 효율이 좋지 못함.)
Stack stack = new Stack();

//제네릭 타입을 사용하는 Stack
Stack<int> stack = new Stack<int>();

 

 

예전에 같은 반 친구가 프로그래머스에 있는 인형뽑기를 스택을 사용해서 풀면 된다고 알려줬는데 아직까지 안 풀어놔서... 자료구조 스택 배운 김에 주말에 시간내서 한번 풀어봐야겠다.


https://bit.ly/37BpXiC
공백제외 : 총 1,107자 (1,617byte)

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #C#과유니티로배우는게임개발올인원패키지Online. #C#과 유니티로 배우는 게임 개발 올인원 패키지 Online.