728x90
Stack에 대해서 잘 모르신다면 여기를 클릭해주세요
구현하는 Stack 기능
- push(data) → 스택의 맨 위에 요소 추가
- pop() → 스택의 맨 위 요소 제거 및 반환 (비어있으면 예외 처리)
- peek() → 스택의 맨 위 요소 확인 (제거하지 않음)
- isEmpty() → 스택이 비어있는지 확인
- size() → 현재 스택에 있는 요소 개수 반환
- clear() → 스택의 모든 요소 제거
- contains(data) → 특정 값이 스택에 존재하는지 확인
혹시 기능만 보고 구현하시고 싶으신 분을 위해 숨김으로 하겠습니다.
더보기
package util.stack;
import java.util.EmptyStackException;
import java.lang.reflect.Array;
public class Stack<T> {
Node<T> head;
int size;
public Stack() {
head = null;
size = 0;
}
// 스택 맨 위에 요소 추가하기
public void push(T element) {
Node<T> newNode = new Node<>(element);
size++;
newNode.next = head;
head = newNode;
}
// 스택 맨 위 요소 제거 및 반환
public T pop() {
if (head == null) {
throw new EmptyStackException();
}
size--;
T element = head.element;
head = head.next;
return element;
}
// 스택 맨 위 요소 확인
public T peek() {
if (head == null) {
throw new EmptyStackException();
}
return head.element;
}
// 스택이 비어있는지 확인
public boolean isEmpty() {
return size == 0; // head == null 대신 size 활용 가능
}
// 스택에 있는 요소 개수 반환
public int size() {
return size;
}
// 스택의 모든 요소 제거
public void clear() {
head = null;
size = 0;
}
// 스택에 특정 값이 존재하는지 확인
public boolean contains(T element) {
Node<T> curNode = head;
while (curNode != null) {
if (curNode.element.equals(element)) {
return true;
}
curNode = curNode.next;
}
return false;
}
// 스택 요소 출력
public void print() {
if (head == null) { // 비어있는 경우
System.out.println("[]");
return;
}
StringBuilder sb = new StringBuilder("[");
Node<T> curNode = head;
while (curNode != null) {
sb.append(curNode.element).append(", ");
curNode = curNode.next;
}
sb.setLength(sb.length() - 2); // 마지막 ", " 제거
sb.append("]");
System.out.println(sb);
}
private static class Node<T> {
Node<T> next;
T element;
public Node(T element) {
this.element = element;
}
}
}
728x90
'Java' 카테고리의 다른 글
[Java] Queue 구현 (1) | 2025.02.10 |
---|---|
[Java] Deque 구현 (1) | 2025.02.04 |
[Java] 실행 시간 측정 (2) | 2025.02.01 |
[Java] SinglyLinkedList 구현 (1) | 2025.01.27 |
[Java] 객체 null 체크 Objects.isNull(), obj == null (1) | 2025.01.25 |