스택 구현(설명x)

반응형
반응형

배열로 스택 만들기 코드 

public class StackArr {
    private int size;
    private int cnt;
    private int[] stack;

    public StackArr(int size) {
        this.size = size;
        stack = new int[this.size + 100];
    }

    public void push(int data) {
        for(int i = cnt; i >0;i--) {
            int temp = stack[i];
            stack[i] = stack[i-1];
            stack[i-1] = temp;
        }
        stack[0] = data;

        cnt = cnt + 1;
    }

    public int pop() {
        if (cnt <= 0) {
            throw new IllegalArgumentException("스택이 비어져 있습니다.");
        }
        int value = stack[0];
        for (int i = 0; i < cnt; i++) {
            stack[i] = stack[i + 1];
        }
        cnt = cnt - 1;
        return value;
    }

}

배열로 스택 만들기 테스트 코드:

 @Test
    void test() {
        StackArr stackArr = new StackArr(10);
        stackArr.push(10);
        stackArr.push(10);
        stackArr.push(3);
        stackArr.push(5);

        assertEquals(stackArr.pop(),5);
        assertEquals(stackArr.pop(),3);
        assertEquals(stackArr.pop(),10);
        assertEquals(stackArr.pop(),10);
        assertThrows(IllegalArgumentException.class,()->stackArr.pop());
    }

 

링크드 리스트로 스택 코드 : 

public class StackLinked {
    private LinkedList linked;

    public StackLinked() {
        linked = new LinkedList();
    }

    public void push(int data) {
        linked.addFirst(data);
    }

    public int pop() {
        return linked.removeFirst();
    }

}

링크드 리스트 코드는 다음 링크에서 확인 가능

 

LinkedList

링크드 리스트는 마치 서로 연결되었다는 느낌을 주는 자료구조입니다. 링크드 리스트는 다음과 같이 그릴 수 있습니다. 특이하게 값뿐만 아니라 다음이 어떤 값인지 알고 있습니다. 단순히 나

b-programmer.tistory.com

링크드 리스트 스택 테스트 코드

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class StackLinkedTest {

    StackLinked stack;

    @BeforeEach
    void initial() {
      stack = new StackLinked();
    }

    @Test
    void push() {
        stack.push(3);
        stack.push(5);
        stack.push(10);
        stack.push(9);
        stack.push(3);

        assertArrayEquals(stack.test(),new int[]{3,9,10,5,3});
    }

    @Test
    void pop() {
        stack.push(3);
        stack.push(5);
        stack.push(10);
        stack.push(9);
        stack.push(3);

        assertEquals(stack.pop(),3);
        assertEquals(stack.pop(),9);
        assertEquals(stack.pop(),10);
        assertEquals(stack.pop(),5);
        assertEquals(stack.pop(),3);
        assertThrows(IllegalArgumentException.class,() -> stack.pop());
    }

}

test배열 코드는 push된 값들을 배열로 만드는 코드입니다.

반응형

'프로그래밍 언어 > 자바' 카테고리의 다른 글

클래스  (0) 2020.12.15
큐 구현(설명 x)  (0) 2020.12.08
Live-Study 대시 보드 만들기.  (0) 2020.12.06
Junit5  (0) 2020.12.04
반복문과 조건문  (0) 2020.11.29

댓글

Designed by JB FACTORY