심심한잉여의 잡동사니

[자료구조] 스택(Stack)이란?(feat. Java) 본문

코딩일기/자료 구조

[자료구조] 스택(Stack)이란?(feat. Java)

심심한잉여 2022. 4. 30. 11:30
반응형

스택은 쌓다라는 의미를 가지고 있으며
많이 알려진 것으론 LIFO(선입후출)라고 한다.

먼저 들어온 데이터가 늦게 나가는 구조이기 때문이다. 

그리고 JAVA에서는 Stack클래스를 기본적으로 지원해주고 있다.

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

위 코드와 같이 선언이 가능하다.

지원하는 메소드로는

- push() : 스택에 데이터 입력
- pop() :  스택에 제일 늦게 들어온 데이터를 반환 후 스택에서 제거
- peek() : 스택에 제일 늦게 들어온 데이터를 반환
- empty() : 스택에서 찾는 값의 인덱스 반환
- search() : 스택이 비어있는지 확인

위 메소드들이 기본 제공이 된다.

이를 Java List를 이용해서 구현을 해보겠다.

// list 생성 후 스택처럼 사용하기
List<Object> stack = new ArrayList<>();

// 메소드 영역

public Object pop(){
	int top = stack.lenth()-1;
    int result = stack.get(top);
    stack.remove(top);
    return result;
}

public void push(Object obj){
	stack.add(obj);
}

public Object peek(){
	return stack.get(stack.lenth()-1);
}

public int search(Object obj){
	for(int i = 0; i<stack.length();i++){
        if(stack.get(i) == obj){
            return i;
        }
    }
    return -1;
}

public boolean empty(){
	if(stack == null || stack.length() == 0){
    	return true;
    }
    return false;
}

이를 통해 대충 스택은 어떻게 동작되는지 어렴풋이 알 수 있을 것이다.

하지만 스택의 경우 값을 뺏다 넣었다가 반복되기 때문에 수정이 빈번하다.

이를 통해 ArrayList보다는 LinkedList가 더 어울릴 것으로 보이니 LinkedList로 바꿔서 구현하는게 더 좋을 것 같다.

 

 

반응형