본문 바로가기

코딩테스트/자료구조

[Java 자료구조] 스택(Stack)

leetcode 20번 문제에서 자료구조로 스택을 사용해야했다.

스택을 공부한지 너무 오래되어 다시 정리하고자 한다.

https://joey-program.tistory.com/83

 

스택이란?

스택은 영어로 '쌓다', '쌓아 올린 더미'를 의미한다. 

의미와 동일하게 자료구조의 스택(stack) 역시 비슷한 특징을 지닌다.

LIFO(Last In First Out)이라는 특징을 갖는데 예를 들어 긴 발포비타민 통을 생각하면 된다.

한 쪽은 막혀있고 한쪽에서만 비타민을 뺄 수 있는 형식인 것이다.

스택의 동작과정(마지막에 넣은 것을 먼저 뺀다.)

자바에서는 java.util.Stack 클래스를 통해 stack(스택) 동작을 제공하고 있다. 큐(Queue) 왁 같이 사용해 다양한 문제 해결을 할 수 있다.

 

스택 사용법

class Solution {
    public static void main(String[] main) {
    
        Stack<String> stack = new Stack<Character>();
        
        stack.push("1");
        stack.push("2");
        stack.push("3");
    
    	//스택에서 최상단 값 출력
    	System.out.println(stack.peek());
        
        //스택에서 데이터 꺼내기
       stack.pop();
       
    }
}

java.util.Stack 클래스를 통해 스택을 구현할 수 있다. 

Stack<Element> stack = new Stack<>();

기본적으로 위와 같이 사용한다.

 

스택추가 (push)

stack.push("1");
stack.push("2");
stack.push("3");

데이터를 push() 메소드를 이용해서 추가하게되면 차곡차곡 데이터가 쌓이게된다.

현재 stack에 가장 최상단에 있는 데이터는 "3"이다.

 

java.util.Stack 클래스에서는 별도의 사이즈를 명시하지 않는다. 처음 스택이 생성되면 10개의 데이터를 저장할 수 있는 공간이 할당된다. 데이터 수가 10개가 넘어가게되면 현재 스택사이즈의 2배에 해당하는 공간이 할당되고 기존 데이터를 복사한다. (배열과 비슷한 특성이 있다.)

 

스택제거 (pop)

stack.pop();

//pop()을 사용하게 되면 "2","1" 값만 남는다.

최상단의 데이터를 pop()메소드를 이용해서 제거가 가능하다.

 

 

기타

size() - 현재 스택에 들어있는 데이터의 갯수를 리턴한다.

 

clear() - 스택에 있는 모든 데이터를 한번에 지워준다.

 

empty() - 스택이 비어있는지 유무 판단.

 

contains() - stack에 특정데이터가 포함되어 있는지 체크한다.

 

push() vs add() 차이

push()는 stack에서 제공, add()는 List에서 제공하는 메서드이다.

push()의 리턴값은 <E>이고, add()의 리턴값은 boolean이다.

차이점도 있고 가독성이 떨어지기 때문에 stack을 써서 코드를 짜고 있다면 push() 메서드를 사용해야한다.

 

 

참고

https://hbase.tistory.com/122

https://bbangson.tistory.com/11