Queue란 무엇일까?
- in JAVA -
이번 포스팅은 자료구조하면 빠질 수 없는 자료구조의 핵심 개념 중 하나인 큐(Queue)에 관한 내용이다.
큐는 스택과 함께 자료구조라는 과목 내에서 안방마님과 같은 존재들인데 스택과 큐는 반대되는 성질을 가진다.
스택은 후입선출(LIFO)구조였다면 큐는 선입선출(FIFO : First In First Out)구조이다.
<큐 (Queue) 의 삽입 >
큐는 양쪽이 뚫려있는 통이라고 생각하면 이해하기 훨씬 쉽다.
양쪽이 뚫려있기 때문에 양쪽으로 데이터를 넣고 뺄 수 있는 것이다.
삽입은 스택과 같이 한 방향으로 차곡차곡 넣는다.
하지만 데이터를 삭제할 때, 즉 큐에서 뺄 때 스택과 정반된다.
<큐 (Queue) 의 삭제>
삭제를 할 때는 삽입했던 방향과 반대 방향에서 삭제를 하게 되어 선입선출 구조가 만들어지게 되는 것이다.
그럼 본격적으로 큐를 코드화한 모습을 살펴보자.
이번 포스팅에서는 자바에서 제공하는 큐 STL을 이용해서 큐를 구현해볼 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import java.util.LinkedList; import java.util.Queue; public class main { public static void main(String[] args) { Queue<Integer> queue = new LinkedList<Integer>(); System.out.println(queue.isEmpty()); queue.offer(100); queue.offer(200); queue.offer(300); System.out.println(queue.isEmpty()); System.out.println(queue.peek()); System.out.println(queue.poll()); System.out.println(queue.poll()); System.out.println(queue.poll()); } } | cs |
자바에서 큐의 구현 클래스는 총 3가지가 있다.
1. LinkedList
2. priorityQueue
3. priorityBlockingQueue
2, 3번은 우선순위 큐 내용이므로 다음에 다루도록 하겠다.
위 예제는 1번, LinkedList 클래스를 이용한 연결된 큐 구현이므로 큐를 정의할 때에도
Queue<DataType> 변수명 = new LinkedList<DataType>(); 이와 같이 정의한 것이다.
큐의 기능에는 대표적으로 데이터값을 큐에 삽입하는 offer(element data);
큐 내에서 가장 먼저 삽입된 값을 참조하는 peek();
큐에서 맨 앞 요소를 꺼내 그 값을 반환하는 poll();
그리고 큐가 비어있는 상태인지 확인하는 isEmpty(); 가 있다.
이렇게 간단하게 큐의 형태와 연결된 큐의 구현에 대해 알아보았다.
자료구조도 프로그래밍과 마찬가지로 반복 학습이 중요하니 직접 구현해보고
이를 응용해서 푸는 문제들도 많이 풀어보자!
'자료구조' 카테고리의 다른 글
[벡터] 동적인 배열 벡터 Vector (in JAVA) (0) | 2019.02.19 |
---|---|
[스택] 스택 (What's Stack?) in JAVA (0) | 2019.02.17 |
[리스트] 연결리스트 (LinkedList) in JAVA (0) | 2019.02.17 |
[리스트] 리스트구조 - 연결리스트의 구현 (0) | 2019.01.26 |
[리스트] 리스트구조 - 배열로 구성된 리스트 (0) | 2019.01.25 |