큐 구현(설명 x)

반응형
반응형

배열로 큐 구현하기.

public class QueueArr {

    private int[] arr;
    private int size;
    private int cnt;

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

    public void offer(int data) {
        arr[cnt] = data;
        cnt = cnt + 1;
    }

    public int poll() {
        if (cnt <= 0) {
            throw new IllegalArgumentException("큐에 아무것도 존재하지 않습니다.");
        }
        int value = arr[0];
        for(int i = 0;i<cnt;i++) {
            arr[i] = arr[i+1];
        }
        cnt = cnt - 1;
        return value;
    }
}

테스트 코드

class QueueArrTest {

    QueueArr queue;
    @BeforeEach
    void init() {
        queue = new QueueArr(10);
    }
    @Test
    void test() {
        queue.offer(2);
        queue.offer(3);
        queue.offer(4);
        queue.offer(2);

        assertEquals(queue.poll(),2);
        assertEquals(queue.poll(),3);
        assertEquals(queue.poll(),4);
        assertEquals(queue.poll(),2);
        assertThrows(IllegalArgumentException.class,()->queue.poll());
    }

}

 

링크드 리스트로 큐 구현하기.

public class QueueLinked {
    private LinkedList linked;

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

    public void offer(int data) {
        linked.addLast(data);
    }

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

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

 

LinkedList

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

b-programmer.tistory.com

테스트 코드:

class QueueLinkedTest {

    QueueLinked queue;

    @BeforeEach
    void init() {
        queue = new QueueLinked();
    }

    @Test
    void offer() {
        queue.offer(2);
        queue.offer(3);
        queue.offer(5);
        queue.offer(7);
        queue.offer(10);
        assertArrayEquals(queue.test(),new int[]{2,3,5,7,10});
    }

    @Test
    void poll() {
        queue.offer(2);
        queue.offer(3);
        queue.offer(5);
        queue.offer(7);
        queue.offer(10);
        assertEquals(queue.poll(),2);
        assertEquals(queue.poll(),3);
        assertEquals(queue.poll(),5);
        assertEquals(queue.poll(),7);
        assertEquals(queue.poll(),10);
        assertThrows(IllegalArgumentException.class,()->queue.poll());
    }
    
}
반응형

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

상속  (1) 2020.12.24
클래스  (0) 2020.12.15
스택 구현(설명x)  (0) 2020.12.07
Live-Study 대시 보드 만들기.  (0) 2020.12.06
Junit5  (0) 2020.12.04

댓글

Designed by JB FACTORY