[자료구조]Java로 Stack 구현해보기 (List 활용)


지난시간에 자료구조 파헤치기를 통해 Stack 구조에 대해서 정리해보았습니다. (페이지로)

 

이번에는 Stack구조를 Java로 만들어 보려합니다. (List 활용)

어렵지 않게 단순히 데이터를 저장할 Stack변수와 Pop 함수 및 Push 함수를 구현해 볼까 합니다.

 

아래는 개발전 설계한 Class-Diagram입니다.

Stack의 Class-Diagram

Class-Diagram 설명

 - stack 변수 : List형식으로 되어있으며, 값을 넣기(push) 위한 공간이라 생각하시면 됩니다.

 - popValues 변수 : 이는 stack변수에서 빠진(pop) 값을 담아두기 위한 공간입니다. (단순히 어떤식으로 빠지나를 확인하기 위한 용도입니다.)

 - push 함수 : String 값을 받아오면 stack 변수에 입력(push) 해줍니다.

 - pop 함수 : stack 변수에서 마지막 값을 꺼냅니다.(pop) 

 - printStack 함수 : push 및 pop 등의 과정을 거쳐 현재 상태를 console창에 print 해줍니다.

 - printPopValue 함수 : pop된 데이터 값을 순서대로 보여줍니다.(popValues 활용)

 

완성 소스 (소스는 github에도 업로드하였습니다. - 링크)

/**
 * Stack 클래스
 * @author karzin
 *
 */
public class Stack {
	
	//Stack 변수 생성 (List)
	private List<String> stack = null;
	
	//Stack 변수에서 pop된 데이터를 저장
	private List<String> popValues = null;
	
	//생성자 - stack을 초기화해줌
	Stack() {
		stack = new ArrayList<String>();
		popValues = new ArrayList<String>();
	}
	
	//stack에 값을 넣음(push)
	public void push(String pushValue) {
		stack.add(pushValue);
	}
	
	//stack에서 값을 뺌(pop)
	public String pop() {
		String popValue = "Stack이 비어있습니다.";
		
		if(stack.size() > 0) {
			popValue = stack.remove(stack.size()-1);
			popValues.add(popValue);
		} else {
			System.err.println(popValue);
		}
		
		return popValue;
	}
	
	//stack 내부에 있는 값을 모두 출력한다.
	public void printStack() {
		int i = 0;
		
		for(String value : stack) {
			if(i < value.length()) {
				i = "| ".length() + value.length() + " |".length();
			}
		}
		
		for(int s = stack.size()-1; s >= 0; s--) {
			int length = "| ".length() + stack.get(s).length() + " |".length();
			length = i-length;
			System.err.print("| "+stack.get(s));
			for(int j = 0; j < length; j++) {
				System.err.print(" ");
			}
			System.err.print(" |");
			System.err.println();
			for(int j = 0; j < i; j++) {
				System.err.print("-");
			}
			System.err.println();
		}
		
		System.err.println();
	}
	
	//popValues 변수에 있는 값을 순서대로 보여줌.
	public void printPopValue() {
		System.out.print("popValues ==> ");
		System.out.println(popValues);
		
		System.out.println();
	}

}

 

테스트해보기 (Main Class 생성 및 실행 -> 소스는 github에도 업로드하였습니다. - 링크)

stack.push("A");
stack.printStack();

stack.push("B");
stack.printStack();

stack.pop();
stack.printPopValue();

stack.push("C");
stack.printStack();

stack.pop();
stack.printPopValue();

stack.pop();
stack.printPopValue();

 

결과

-> Debug 모드로 실행하셔서 한줄 한줄 어떤식으로 바뀌는지 확인해보시면 더욱 이해하기 쉽습니다.

---

졸면서 하느라고 함수도 소스도 많이 적은느낌이네요.

버그같은거 있다면 댓글남겨주시면 최대한 바로 수정하겠습니다.

감사합니다.

 

 

** 그림에 사용된 글자체는 네이버 나눔글꼴의 나눔스퀘어 Bold입니다.

 

버전정보 (v1.1)

 - v1.0 2020.06.18 배포

 - v1.1 2020.06.23 제목 말머리 [자료구조] 추가

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

 

Karzin

abbeea@naver.com




+ Recent posts