728x90
반응형
💡 Queue의 특징
- 맨 앞(front)에서 자료를 꺼내거나 삭제하고, 맨 뒤(rear)에서 자료를 추가 함.
- First in First Out(FIFO : 선입선출) 구조
- 일상 생활에서 일렬로 줄 서 있는 모양
- 순차적으로 입력된 자료를 순서대로 처리하는데 많이 사용되는 자료구조
- 콜센터에 들어온 문의 전화, 메세지 큐 등에 활용됨
- jdk 클래스 : ArrayList
🧑🏻💻 연결 리스트를 활용하여 Queue 구현하기
- MyLinkedList.java
https://muscleking3426.tistory.com/73
[Java] 연결 리스트(LinkedList)
💡 LinkedList 특징 동일한 데이터 타입을 순서에 따라 관리하는 자료 구조 자료를 저장하는 노드에는 자료와 다음 요소를 가리키는 링크(포인터)가 있음 자료가 추가 될때 노드 만큼의 메모리를
muscleking3426.tistory.com
- MyListQueue.java
package ch05;
import ch03.MyLinkedList;
import ch03.MyListNode;
interface IQueue{
//IQueue 인터페이스
public void enQueue(String data); //데이터 삽입
public String deQueue(); //데이터 삭제
public void printAll(); //전체 요소 출력
}
public class MyListQueue extends MyLinkedList implements IQueue {
//연결리스트를 상속받고, IQueue 인터페이스 구현
MyListNode front;
MyListNode rear;
public MyListQueue() {
// TODO Auto-generated constructor stub
// 큐 초기화
front = null; // 큐의 맨 앞 연결리스트
rear = null; // 큐의 맨 뒤 연결리스트
}
@Override
public void enQueue(String data) {
// TODO Auto-generated method stub
// 큐에 데이터 삽입
// 새로운 연결리스트 노드 데이터 정의
MyListNode newNode;
if(isEmpty()) {
//큐가 비어있다면
//새 데이터 삽입 후
newNode = addElement(data);
// 큐의 front의 rear 모두 새로운 노드로 초기화
front = newNode;
rear = newNode;
}
else {
//큐가 비어있지 않다면
//새 데이터 삽입 후
newNode = addElement(data);
// rear를 새로운 노드로 지정 [맨 뒤]
rear = newNode;
}
System.out.println(newNode.getData() + " added");
}
@Override
public String deQueue() {
// TODO Auto-generated method stub
if(isEmpty()) {
//큐가 비어있다면 삭제할 데이터 없음
System.out.println("Queue is Empty");
return null;
}
//맨 앞 데이터부터 삭제 [가장 먼저 들어온 데이터]
String data = front.getData();
//맨 앞 데이터로 front 노드의 다음노드로 front 설정
front = front.next;
if(front == null) {
//맨 앞 노드가 null이면 맨 뒤 노드도 null로 설정
rear = null;
}
//삭제할 데이터 반환
return data;
}
public void printAll() {
//큐의 모든 데이터 출력
if(isEmpty()) {
System.out.println("Queue is Empty");
return;
}
//임시 노드에 현재 큐의 맨 앞 노드 대입
MyListNode temp = front;
while(temp != null) {
System.out.print(temp.getData() + ",");
//맨 앞노드의 다음노드로 대입
temp = temp.next;
}
System.out.println();
}
}
- MyListQueueTest.java
package ch05;
public class MyListQueueTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyListQueue listQueue = new MyListQueue();
listQueue.enQueue("A");
listQueue.enQueue("B");
listQueue.enQueue("C");
listQueue.enQueue("D");
listQueue.enQueue("E");
System.out.println(listQueue.deQueue());
listQueue.printAll();
}
}
728x90
반응형
'Java' 카테고리의 다른 글
[Java] Adapter pattern (0) | 2023.01.10 |
---|---|
[Java] 싱글톤(Singleton) 패턴 (0) | 2023.01.10 |
[Java] 스택(Stack) 구현 (0) | 2023.01.08 |
[Java] 연결 리스트(LinkedList) (0) | 2023.01.03 |
[Java] 배열(Array) 구현 (0) | 2023.01.03 |