1. 소개
정수 배열을 이용해 Stack을 구현해보았다.
기본 크기는 1이며 스택의 크기를 초기화할 수 있도록 생성자를 만들었다.
주요 메서드인 push, pop, pick 메서드와 스택의 크기를 구하는 size를 구현했다
2. 생성자
멤버 변수로는 다음 데이터의 위치(index)를 나타내는 top과 정수 배열인 stack이 있다.
//MyStack의 멤버 변수
int top;
int[] stack;
기본 크기는 1이며, 크기는 초기화 가능하게 만들었다.
public MyStack() {
top = 0;
stack = new int[1];
}
public MyStack(int size) {
top = 0;
stack = new int[size];
}
3. PUSH()
새로운 데이터를 추가하는 push 메서드다.
데이터의 위치는 top이며 데이터를 추가할 때마다 위치가 증가한다.
정수 배열을 사용하기 때문에 데이터의 수가 배열보다 커지면 기존 배열보다 크기가 1만큼 큰 배열을 새로 만든다.
그리고 data를 저장한 뒤 top의 위치를 이동한다.
이때 배열에 데이터가 가득 찼는지 확인하는 isFull 메서드를 만들어 이용한다.
public void push(int data) {
if(isFull()){
stack = Arrays.copyOf(stack, stack.length + 1);
}
stack[top] = data;
top++;
}
private boolean isFull(){
if(top >= stack.length){
return true;
} else {
return false;
}
}
4. PEEK()
peek 메서드는 가장 마지막에 삽입된 데이터를 확인하는 메서드다.
만약 배열이 비어있다면 예외를 발생시키며 배열이 비어있는지 확인하기 위한 isEmpty 메서드를 만들었다..
public int peek(){
if(isEmpty()){
throw new IllegalArgumentException("stack is empty");
}
return stack[top-1];
}
private boolean isEmpty(){
if(top == 0){
return true;
}
return false;
}
5. POP()
pop 메서드는 마지막 데이터를 반환한 뒤 stack에서 해당 데이터를 삭제하는 메서드다.
데이터 반환에는 기존의 peek 메서드를 이용한다.
데이터 반환 뒤 해당 데이터를 배열에서 삭제하고 top의 위치를 감소시킨다.
정수 배열의 초기값은 0이므로 데이터 삭제 = 0 으로 생각해 만들었다.
public int pop(){
int obj = peek();
stack[--top] = 0;
return obj;
}
6.SIZE()
size는 현재 stack의 크기를 반환하는 메서드다.
push 메서드로 stack의 크기가 유연하게 변하는지 테스트하기 위해 만들었다.
public int size(){
return stack.length;
}
7. 테스트
구현한 stack이 잘 작동되는지 확인해봤다.
push 메서드로 데이터를 삽입하면서 stack의 크기가 변하는지 출력해보았다.
public static void main(String[] args) {
MyStack stack = new MyStack(3);
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack.size());
stack.push(4);
System.out.println(stack.size());
stack.push(5);
System.out.println(stack.size());
}

'개발공부 > Java' 카테고리의 다른 글
| [디자인 패턴] 어댑터 패턴(Adapter pattern) (0) | 2023.03.31 |
|---|---|
| [디자인패턴] 싱글톤 패턴(Singleton pattern) (0) | 2023.03.31 |