개발 관련 부가 지식/기타
Java Stack 구현
Developer-Choi
2023. 2. 21. 13:57
728x90
728x90
Stack은? LIFO(Last-In First-Out) 형태의 자료 구조
Stack 자료 구조 java로 구현해 보았다.
-> MyNode라는 객체를 가지고 로직 구현을 함, MyNode는 입력데이터와 다음 MyNode의 주소 값을 가지고 있음
public class MyStack<T> {
class MyNode<T> {
private T data;
private MyNode<T> next;
public MyNode(T data) {
this.data = data;
}
}
//-------------> Stack은 LIFO 구조로 top만 클래스안에서 직접 관리
private MyNode<T> top;
//-------------> push를 할때마다 top의 node를 바꿔줘야함
//-------------> (1). 기존 top을 입력한(생성한) node의 다음 값으로 할당함
//-------------> (2). top을 입력한(생성한) node로 바꿈
public void push(T item) {
MyNode<T> node = new MyNode<T>(item);
node.next = top; //(1)
top = node; //(2)
}
//-------------> pop은 현재 top의 data 값을 리턴해줘야 하고, 리턴 전에 top을 next의 node로 바꿔줘야함
//-------------> (1). 리턴할 top의 data값을 변수로 빼놓음
//-------------> (2). top을 top의 다음 node값으로 바꿈
//-------------> (3). (1)로 뺴놓은 값을 리턴함
public T pop() {
if (top == null) {
throw new NullPointerException();
}
T item = top.data; //(1)
top = top.next; //(2)
return item; //(3)
}
//-------------> peek은 현재 top의 data 값만 출력
public T peek() {
if (top == null) {
throw new NullPointerException();
}
return top.data;
}
//-------------> top이 비었는지만 출력
public boolean isEmpty() {
return top == null;
}
}
class Test {
public static void main(String[] args) {
MyStack<Integer> stack = new MyStack<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.peek());
System.out.println(stack.pop());
System.out.println(stack.isEmpty());
/* 출력 값
3
2
1
1
true
* */
}
}
(디버깅 통해서 하나씩 살펴보면 더 이해하기 쉬워요) ✔
👏
👏