이 포스트는 FastCampus에 이 강의를 보고 포스팅되었습니다.
문제가 될 시 삭제될 예정입니다.
JDK 클래스에는 Stack이 있습니다.
Push와 Pop, Peek를 구현해볼까 합니다.
전편에도 말했지만 모든 코드는 깃허브에 올라갈 예정입니다.
링크
이번에 할 스택 구현은 저번에 만든 배열 클래스를 가져와서 구현합니다.
히히 재밌겠ㄷ
public class MyArrayStack {
MyArray arrayStack; // 저번에 만든 MyArray를 가져와 선언함
int top; // top은 Count와 같은 역할임
public MyArrayStack() { // 기본 생성자
top = 0;
arrayStack = new MyArray();
}
public MyArrayStack(int size) { // 사이즈를 받을때는
top = 0; // Top는 그대로 있어야함!
arrayStack = new MyArray(size); // MyArray에 사이즈를 전달.
}
}
public boolean isFull() {
if (top == arrayStack.ARRAY_SIZE) { // top과 배열 크기가 같으면
return true; // 꽉찬거라고 전해줌
}
return false; // 아님 안찼다고 전해줌
}
public boolean isEmpty() {
if (top == 0) { // top이 0이라면?
return true; // 비었다고 전해줌
}
return false; // 아님 하나 이상 들어와있다고 전해줌
}
public void push(int data) {
if (isFull()) { // 만약 다 찼다면?
System.out.println("꽉차서 자료를 추가할 수 없습니다."); // 에러 메시지 출력
return;
}
arrayStack.addElement(data); // 자료 추가
top++; // top 증가
}
public int pop() {
if(isEmpty()) { // 만약 비었다면?
System.out.println("배열이 비어있습니다."); // 에러 메시지 출력
return MyArray.ERROR_NUM; // 에러 넘버 반환
}
return arrayStack.deleteElement(--top); // 요소를 삭제함과 동시에 삭제한 요소를 반환
}
Peek를 구현하기 위해 MyArray에 특정 위치에 있는 자료를 반환하는 메서드를 만듭니다.
// MyArray.java
public int getElement(int position) {
// 만약 count가 0라면
if (isEmpty()) {
// 예외 발생
throw new ArrayStoreException("이미 값이 없는 배열입니다.");
}
// 만약 포지션 값이 이상하게 들어올 경우
if (position < 0 || position > count - 1) {
// 예외 발생
throw new ArrayStoreException("포지션 값이 이상합니다.");
}
return intArr[position]; // 해당 position 값에 있는 자료 출력
}
그리고 peek를 구현합니다.
public int peek() {
if(isEmpty()) { // 만약 비었다면?
System.out.println("배열이 비어있습니다."); // 에러 메시지 출력
return MyArray.ERROR_NUM; // 에러 넘버 반환
}
return arrayStack.getElement(--top);
}
전체 구현 코드는 여기서도 확인 가능합니다.
배열을 이용한 스택 구현은 여기까지입니다.
다음 시간에는 연결리스트를 이용한 큐(Queue)를 구현해보도록 하겠습니다.
수고하셨습니다.