IntLinkedStack 클래스
2025. 4. 20. 16:59ㆍ자료구조
코드 설명
/******************************************************************************
* IntLinkedStack 클래스는 연결 리스트를 이용한 정수형 스택의 구현체입니다.
******************************************************************************/
public class IntLinkedStack implements Cloneable {
// IntLinkedStack 클래스의 불변 조건 (Invariant):
// 1. 스택의 요소들은 연결 리스트에 저장되며, 스택의 맨 위(top)는 연결 리스트의 head 노드입니다.
// 2. 인스턴스 변수 top은 연결 리스트의 head를 참조합니다.
private IntNode top;
/**
* 빈 스택을 초기화합니다.
* @param 없음
* @postcondition: 이 스택은 비어 있습니다.
**/
public IntLinkedStack() {
top = null;
}
/**
* 이 스택의 복사본을 생성합니다.
* @param 없음
* @return 이 스택의 복사본을 반환합니다.
* 반환된 복사본과 원본은 서로 영향을 주지 않습니다.
* 반환값은 IntLinkedStack으로 형변환해야 사용할 수 있습니다.
* @throws OutOfMemoryError 메모리가 부족하여 복사본 생성에 실패할 경우 발생합니다.
**/
public Object clone() {
IntLinkedStack answer;
try {
answer = (IntLinkedStack) super.clone();
} catch (CloneNotSupportedException e) {
// 이 예외는 발생하지 않아야 합니다.
// 만약 발생한다면, 아마도 이 클래스에서 Cloneable을 구현하지 않았기 때문입니다.
throw new RuntimeException("이 클래스는 Cloneable을 구현하지 않았습니다.");
}
answer.top = IntNode.listCopy(top); // 노드 깊은 복사
return answer;
}
/**
* 스택이 비어있는지 확인합니다.
* @param 없음
* @return 스택이 비어 있으면 true, 아니면 false를 반환합니다.
**/
public boolean isEmpty() {
return (top == null);
}
/**
* 스택의 맨 위 데이터를 제거하지 않고 반환합니다.
* @param 없음
* @precondition 스택이 비어있지 않아야 합니다.
* @return 스택의 맨 위 데이터
* @throws EmptyStackException 스택이 비어 있을 경우 발생합니다.
**/
public int peek() {
if (top == null)
throw new EmptyStackException();
return top.getData();
}
/**
* 스택의 맨 위 데이터를 꺼내어 제거합니다.
* @param 없음
* @precondition 스택이 비어있지 않아야 합니다.
* @postcondition 반환된 값은 스택의 맨 위 값이며, 그 값은 스택에서 제거됩니다.
* @return 스택의 맨 위 데이터
* @throws EmptyStackException 스택이 비어 있을 경우 발생합니다.
**/
public int pop() {
int answer;
if (top == null)
throw new EmptyStackException();
answer = top.getData();
top = top.getLink(); // 다음 노드로 top 이동
return answer;
}
/**
* 새로운 데이터를 스택 위에 추가합니다. null도 허용됩니다.
* @param item 스택에 추가할 데이터
* @postcondition 해당 데이터가 스택에 push 됩니다.
* @throws OutOfMemoryError 메모리가 부족할 경우 발생합니다.
**/
public void push(int item) {
top = new IntNode(item, top);
}
/**
* 현재 스택에 있는 요소 개수를 반환합니다.
* @param 없음
* @return 스택에 있는 요소의 개수
**/
public int size() {
return IntNode.listLength(top);
}
}
인스턴스 멤버
private IntNode top;
- 스택의 요소들은 연결 리스트에 저장되고 스택의 맨 위(top) 에는 연결 리스트의 head노드이다.
- 인스턴스 변수 top은 연결 리스트의 head를 참조한다.
생성자
public IntLinkedStack() {
top = null;
}
- 빈 스택을 초기화해주는 역할을 한다.
메서드
public Object clone() {
IntLinkedStack answer;
try {
answer = (IntLinkedStack) super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException("이 클래스는 Cloneable을 구현하지 않았습니다.");
}
answer.top = IntNode.listCopy(top);
return answer;
}
- IntLinkedStack형으로 super.clone을 활용하여서 얕은 복사를 해준다.
- 이후에 answer.top에 IntNode.listCopy로 깊은 복사 해준다.
'자료구조' 카테고리의 다른 글
| IntLinkedQueue 클래스 (0) | 2025.04.20 |
|---|---|
| 스택 활용하기 (0) | 2025.04.20 |
| IntStack 클래스 (0) | 2025.04.19 |
| IntNode 클래스 (0) | 2025.04.19 |
| IntLinkedBag 클래스 (0) | 2025.04.18 |