자료구조 #6 - 스택 구현

HongInSung·2022년 11월 28일
0
post-thumbnail

이 포스트는 FastCampus에 이 강의를 보고 포스팅되었습니다.
문제가 될 시 삭제될 예정입니다.

시작하기 전에 스택 특징 좀 다시 알려줘바

  • 맨 마지막 위치인 Top에서만 연산을 수행할 수 있습니다.
    • 삽입 연산 - Push
    • 꺼내는 연산(삭제도 같이합니다.) - Pop
    • 꺼내보기만 하는 연산(삭제는 안합니다.) - Peek
  • LIFO(Last In First Out, 후입선출) 구조로 되어있습니다.
  • 택배 상자가 쌓여있는 모양을 하고 있습니다.
  • 장기에서 무르기를 예로 들 수 있습니다.

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; // 아님 하나 이상 들어와있다고 전해줌
}

스택 Push 구현

public void push(int data) {
    if (isFull()) { // 만약 다 찼다면?
        System.out.println("꽉차서 자료를 추가할 수 없습니다."); // 에러 메시지 출력
        return;
    }
    arrayStack.addElement(data); // 자료 추가
    top++; // top 증가
}

스택 Pop 구현

public int pop() {
    if(isEmpty()) { // 만약 비었다면?
        System.out.println("배열이 비어있습니다."); // 에러 메시지 출력
        return MyArray.ERROR_NUM; // 에러 넘버 반환
    }
    return arrayStack.deleteElement(--top); // 요소를 삭제함과 동시에 삭제한 요소를 반환
}

스택 Peek 구현

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)를 구현해보도록 하겠습니다.
수고하셨습니다.

profile
안녕하세요! 풀스택 노려보고 있는 홍인성입니다!

0개의 댓글

관련 채용 정보