Queue.
큐는 대기열이라고도 하며 선입선출(First In First Out) 자료구조 입니다.
먼저 들어온 데이터가 먼저 나가는 구조로 쉽게 말해 선착순을 떠올리면 됩니다.
먼저 온 사람은 먼저 집에가세요.!!!!!!!
입력 순서대로 데이터 처리가 필요할 때 사용하며 프린터 출력 대기열 등과 비교 됩니다.
자바에서는 Queue는 인터페이스로 정의되어 있고 Priority Queue 등 구현되어 있으나
ArryList나 LinkedList 클래스를 활용하여 구현하는 경우가 있음
- 큐 데이터 추가
- 큐 데이처 삭제
Queue 주요 메서드.
package day017;
import java.util.LinkedList;
import java.util.Queue;
public class QueueTest1 {
public static void main(String[] args) {
Queue queue = new LinkedList<>();
// 데이터 삽입 - Enqueue
queue.add(1);
queue.add(2); // 사용 공간이 없어 삽입 실패시 Exception 발생
queue.offer(3); // 공간이 없어 실패 시 flase 반환
System.out.println(queue); // [1, 2, 3]
// 데이터 삭제 - Dequeue
System.out.println(queue.remove()); // 1 맨 앞 요소를 반환하고 삭제, 큐가 비어있다면 예외 발생
System.out.println(queue.poll()); // 2 기능은 같지만 비어있을 시 null 반환
// head 조회
System.out.println(queue.peek()); // 3 , 비어있으면 null 반환
System.out.println(queue.element()); // 3 , isEmpty() == 예외 발생
}
}
ArrayList로 Queue 구현하기.
import java.util.ArrayList;
class MyQueue {
private ArrayList arrayQueue = new ArrayList<>();
public void enQueue(String data) {
arrayQueue.add(data);
}
public String deQueue() {
int length = arrayQueue.size();
if (length == 0) {
System.out.println("Queue is empty");
return null;
}
return arrayQueue.remove(0);
}
public String peek() {
int length = arrayQueue.size();
if (length == 0) {
System.out.println("Queue is empty");
return null;
}
return arrayQueue.get(0);
}
@Override
public String toString() {
return "MyQ{" +
"arrayQueue=" + arrayQueue +
'}';
}
}
public class QueueArrayListTest {
public static void main(String[] args) {
MyQueue queue = new MyQueue();
queue.enQueue("A");
queue.enQueue("B");
queue.enQueue("C");
System.out.println(queue.peek()); // A
System.out.println(queue); //MyQ{arrayQueue=[A, B, C]}
System.out.println(queue.deQueue()); // A
System.out.println(queue.deQueue()); // B
System.out.println(queue.deQueue()); // C
System.out.println(queue.deQueue()); // empty, null
System.out.println(queue); // []
}
}
'BACKEND > Data Structure & Algorithm' 카테고리의 다른 글
선형자료구조 - 해시, 해시테이블, 해시맵, 해시표 (0) | 2023.05.20 |
---|---|
선형자료구조 - 데크/덱(Deque) (1) | 2023.05.19 |
자료구조란 무엇이고 선형/비선형 자료구조란? (0) | 2023.05.17 |
선형자료구조 - 스택(Stack) (8) | 2023.05.16 |
선형자료구조 - 연결리스트(LinkedList) (1) | 2023.05.15 |