본문 바로가기
Programming/Algorithm&DataStructure

[JAVA/자료구조] Stack Interface

by prinha 2021. 8. 9.
반응형

Stack

후입선출(LIFO)

 

한 번쯤, StackOverflowError를 마주할 수 있는데 재귀가 깊어지면서 발생한 오류이다.

메소드를 호출할 때마다 메소드 내에 정의된 변수들의 값이 Stack내에 쌓이게 되는데, 재귀가 깊어지면

Stack 메모리에 이 값들이 쌓이면서 총량이 할당된 메모리 양보다 커질 때 내뱉게 된다.

 

Stack의 활용

1) 페이지 뒤로가기, 실행 취소

가장 최근에 방문했던 페이지가 가장 상단에 위치함, 실행 취소 또한 마찬가지다.

2) 수식 괄호 검사

여는 괄호가 있으면 닫는 괄호 또한 반드시 있어야 한다. 어느 하나라도 부족하거나 많을 경우 수식을 완성할 수 없다.

 

Stack Interface에 선언된 대표적인 메소드

java에서는 Vector클래스를 상속받다보니 아래의 클래스보다 훨씬 많은 메소드를 지원한다.

메소드 리턴 타입 설명
push(E item) E 스택의 맨 위에 요소를 추가한다.
pop() E 스택의 맨 위의 요소를 제거하고 제거된 요소를 반환한다.
peek() E 스택의 맨 위의 요소를 제거하지 않고 반환한다.
search(Object o) int 스택의 상단부터 탐색하여 지정된 객체가 있는 요소의 위치를 반환한다. 없을 경우 -1을 반환한다.
size() int 현재 스택에 있는 요소의 개수를 반환한다.
clear() void 모든 요소들을 제거한다.
empty() int 현재 스택에 요소가 존재하지 않을 경우 true를,
그 외에는 false를 반환한다.

 

package Interface_form;
 
/**
 * 
 * 자바 stack Interface입니다. <br>
 * StackInterface는 Stack에 의해 구현됩니다.
 * 
 * @author st_lab
 * @param <E> the type of elements in this Stack
 *
 * @version 1.0
 * 
 */
 
 
public interface StackInterface<E> {
	
	/**
	 * 스택의 맨 위에 요소를 추가합니다. 
	 * 
	 * @param item 스택에 추가할 요소 
	 * @return 스택에 추가된 요소 
	 */
	E push(E item);
	
	/**
	 * 스택의 맨 위에 있는 요소를 제거하고 제거 된 요소를 반환합니다.
	 * 
	 * @return 제거 된 요소 
	 */
	E pop();
	
	/**
	 * 스택의 맨 위에 있는 요소를 제거하지 않고 반환합니다.
	 * 
	 * @return 스택의 맨 위에 있는 요소 
	 */
	E peek();
	
	/**
	 * 스택의 상반 부터 특정 요소가 몇 번째 위치에 있는지를 반환합니다.
	 * 중복되는 원소가 있을경우 가장 위에 있는 요소의 위치가 반환됩니다.
	 *
	 * @param value 스택에서 위치를 찾을 요소
	 * @return 스택의 상단부터 처음으로 요소와 일치하는 위치를 반환.
	 *         만약 일치하는 요소가 없을 경우 -1 을 반환 
	 */
	/* 
	 *         ________
	 *         | a    |
	 * idx 3   |______|   search("w")
	 *         | e    |   --> 상단(idx 3)으로 부터 3번 째에 위치 
	 * idx 2   |______|       == return 되는 값 : 3
	 *         | w    |
	 * idx 1   |______| 
	 *         | k    |
	 * idx 0   |______|
	 * 
	 */ 
	int search(Object value);
	
	/**
	 * 스택의 요소 개수를 반환합니다.
	 * 
	 * @return 스택에 있는 요소 개수를 반환 
	 */
	int size();
	
	/**
	 * 스택에 있는 모든 요소를 삭제합니다.
	 */
	void clear();
	
	/**
	 * 스택에 요소가 비어있는지를 반환합니다.
	 * 
	 * @return 스택에 요소가 없을 경우 {@code true}, 그 외의 경우 {@code false}를 반환
	 */
	boolean empty();
}

 

 


출처 및 참고

https://st-lab.tistory.com/173

https://prinha.tistory.com/entry/JAVA%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%9E%90%EB%B0%94-%EC%BB%AC%EB%A0%89%EC%85%98-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%ACjava-collection-framework

 

[JAVA/자료구조] 자바 컬렉션 프레임워크(java collection framework) 총정리

- 컬렉션(collection) : 여러 객체(데이터)를 담을 수 있는 자료구조, 다수의 데이터 그룹 - 프레임워크(framework) : 표준화, 정형화된 체계적인 프로그래밍 방식 ▶ 컬렉션 프레임워크(collection framework)

prinha.tistory.com

 

반응형