Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Stack 구현 본문

Java/자료구조

Stack 구현

Seung__ 2021. 10. 24. 19:33

1. Stack 특징


  • Last In Last Out
  • 가장 최근의 자료를 찾아오거난 게임에서 히스토리 유지하면서 무를 때 ㅋㅋㅋ
  • 함수의 메모리는 호출 순서에 따른! Stack 구조
  • jdk : Stack

 

 

2. Stack 구현


  • 이미 Array를 구현했으니, 구현한 Array를 활용하자.
  • top은 size를 의미하며  마지막 index + 1 과 같다.
  • pop : top에 있는 data를 꺼내고 array에서 삭제
  • peek : top에 있는 data 조회.
public class MyArrayStack {

    MyArray arrayStack;
    int top;

    public MyArrayStack() {
        top = 0;
        arrayStack = new MyArray();
    }

    public MyArrayStack(int size){
        top = 0;
        arrayStack = new MyArray(size);
    }

    public void push(int data){
        if (isFUll()){
            throw new OutOfMemoryError("stack is full");
        }

        arrayStack.addElement(data);
        top++;
    }

    public int pop(){
        if (isEmpty() == true){
            return MyArray.ERROR_NUM;
        }
        return arrayStack.removeElement(--top);
    }

    public int peek(){
        if (isEmpty() == true){
            return MyArray.ERROR_NUM;
        }
        return arrayStack.getElement(top-1);
    }


    public boolean isFUll(){
        if (top == arrayStack.getARRAY_SIZE()){
            return true;
        }
        else return false;
    }

    public boolean isEmpty(){
        if (top == 0){
            return true;
        }
        return  false;
    }

    public void printAll(){
        arrayStack.printAll();
    }
}

 

 

 

3. Test


class MyArrayStackTest {

    MyArrayStack arrayStack;
    int cnt = 5;

    @BeforeEach
    void setUp() {
        arrayStack = new MyArrayStack();

        for (int i = 0; i< cnt; i++){
            arrayStack.push(i);
        }
    }

    @AfterEach
    void afterTest(){
        arrayStack.arrayStack.clear();
    }

    @Test
    void push() {
        //given
        int pushData = 10;

        //when
        arrayStack.push(pushData);

        //then
        assertEquals(arrayStack.top, cnt+1);
        assertEquals(arrayStack.peek(), pushData);
        assertEquals(arrayStack.pop(), pushData);
    }

    @Test
    void pop() {
        //given

        //when
        arrayStack.pop();

        //then
        assertEquals(arrayStack.top, cnt - 1);
        assertEquals(arrayStack.peek(), 3);
}

    @Test
    void peek() {
        //given

        //when
        int peek = arrayStack.peek();

        //then
        assertEquals(peek, 4);
        assertEquals(arrayStack.top, cnt);
    }

    @Test
    void isFUll() {
        for (int i=cnt; i < arrayStack.arrayStack.getARRAY_SIZE(); i++){
            arrayStack.push(i);
        }

        boolean result = arrayStack.isFUll();
        assertTrue(result);
    }

    @Test
    void isNotFUll() {
        for (int i=cnt; i < arrayStack.arrayStack.getARRAY_SIZE()-1; i++){
            arrayStack.push(i);
        }

        boolean result = arrayStack.isFUll();
        assertFalse(result);
    }

}

 

 

4. GitHub : 211024 Stack 구현


 

GitHub - bsh6463/dataStructure

Contribute to bsh6463/dataStructure development by creating an account on GitHub.

github.com

 

'Java > 자료구조' 카테고리의 다른 글

Generic Programming  (0) 2021.10.24
Queue 구현  (0) 2021.10.24
LinkedList 구현  (0) 2021.10.24
Array 구현  (0) 2021.10.24
자료구조-비선형  (0) 2021.10.24
Comments