728x90
큐(Queue)란 무엇일까?
이쯤되니 자료구조는 우리 생활에 꾀나 밀접한 체계라는 것을 알 수 있습니다.
우리가 놀이동산에 가거나 화장실에서 줄을 설 때, 자연스럽게 내 차례를 기다립니다. 차례대로 줄을 선다는 것은 먼저 온 사람은 먼저 들어 갈 수 있다라는 사회적 약속이기 때문이죠
큐(Queue)는 이와 같은 자료구조입니다.
즉, 큐(Queue)는 선입선출(LILO: Last In Last Out)의 특징을 가지고 있습니다.
코드를 통해 알아보도록 하겠습니다.
Queue<Integer> queue = new LinkedList<>(); //int형 queue를 선언합니다.
queue.add(1); // queue에 값 1 추가
queue.add(2); // queue에 값 2 추가
queue.add(3); // queue에 값 3 추가
queue.add(4); // queue에 값 4 추가
// 1 <- 2 <- 3 <- 4 순번대로 데이터가 입력되었습니다.
// 그렇다면 순서대로 데이터를 꺼내겠습니다.
queue.poll();
queue.poll();
queue.poll();
queue.poll();
// 1, 2, 3, 4 순서대로 데이터가 나오게 됩니다.
우리는 다음과 같이 Queue에 데이터를 넣는 것을 'enqueue', 데이터를 꺼내는 것을 'dequeue'라고 합니다.
또한 큐(queue)는 LILO의 특징 외에도, 데이터를 하나씩 넣고 뺄 수 있다는 것과, 두개의 입출력 방향을 가지고 있다는 것을 알 수 있습니다.
큐(Queue) 자료구조의 장단점
- 자료를 먼저 넣은 순서대로 꺼내서 사용할 수 있기 때문에 해당 자료구조의 특징으로 처리해야할 작업이 여러개인 경우에 효율적으로 처리할 수 있습니다.
- 가령, 프린터에 작업물을 인쇄하는 경우, 은행의 대기순번을 정하는 경우 유용하게 적용할 수 있습니다.
- 삽입과 삭제가 양 끝에서 이루어 지며, 원소를 삭제하는 연산이 없으므로 상대적으로 빠른 속도를 보인다.
- 배열의 경우 원소를 삭제한다면 배열을 복사하고 다시 순회하여 데이터를 삽입하는 반면 큐(Queue)는 끝단에서 삭제하는 것으로 끝나므로 실행 속도에 차이가 있다.
- 중간에 있는 데이터를 조회하거나 수정하는 연산에 적합하지 않다.
- 크기 제한이 없기 때문에 메모리의 낭비가 발생할 수 있다.
- iterator() 메서드가 지원되지 않는다.
'CS > Data Structure' 카테고리의 다른 글
[ 자료구조 ] 스택(Stack)이란 무엇일까? (0) | 2023.07.17 |
---|---|
[ 자료구조 ] 맵(Map)이란 무엇일까? (0) | 2022.09.13 |
[ 자료구조 ] 셋(Set)이란 무엇일까? (0) | 2022.09.13 |
[ 자료구조 ] 이터레이터(Iterator)란 무엇일까? (0) | 2022.09.13 |
[ 자료구조 ] 리스트 (List)란 무엇일까? (0) | 2022.09.13 |