티스토리 뷰
Queue란?
- FIFO(First In First Out)의 형태, 먼저 들어온 데이터가 가장 먼저 나가는 구조이다.
- 큐는 한 쪽 끝은 front로 지정하여 삭제 연산만 수행
- 다른 한쪽 끝은 rear로 지정하여 삽입 연산만 수행
- Enqueue: 큐 맨 뒤에 데이터 추가
- Dequeue: 큐 맨 앞쪽의 데이터 삭제
Queue 구현
(1) Array
// Array 로 queue 구현 하기
public class ArrayQueue {
int[] elements;
private int front = 0;
private int rear = 0;
private int size = 2;
private int exSize =0;
public ArrayQueue(){
elements = new int[size];
}
/**
* 데이터 삽입
*/
public void offer(int data){
if(rear == elements.length){
System.out.println("[사이즈 확장] Size : " + size +" -> " + (rear+5));
exSize = rear +5;
int[] extendElements = new int[exSize];
// migrate
for(int i=0; i<rear; i++){
extendElements[i] = elements[i];
}
elements = extendElements;
}
elements[rear++] = data;
System.out.println( "데이터 추가 : "+data + " -> front : " + front +" , rear : "+ rear);
}
/**
* 맨 앞의 데이터 출력
*/
public int peek(){
return elements[front];
}
/**
* 데이터 출력후 삭제
*/
public int poll(){
if(front == rear) {
System.out.println("데이터가 존재하지 않습니다");
return -1;
}
int data = elements[front];
elements[front++] = 0;
return data;
}
/**
* 맨앞의 데이터 삭제
*/
public void remove(){
if(front == rear) {
System.out.println("데이터가 존재하지 않습니다");
}
System.out.println("데이터 삭제 : " + elements[front]);
elements[front] = 0;
front++;
}
/**
* 모든 데이터 삭제
*/
public void clear(){
elements = new int[size];
front=0;
rear=0;
System.out.println("모든 데이터 삭제 완료");
}
}
(2) LinkedList
// Linked list로 queue 구현하기
public class ListNodeQueue {
private ListNode head;
private int front=0;
private int rear=0;
public ListNodeQueue(){}
/**
* 데이터 삽입
*/
public void offer(int data){
if(head==null){
head = new ListNode(data);
}
System.out.println( "데이터 추가 : "+data + " -> front : " + front +" , rear : "+ rear);
head.add(head, new ListNode(data), rear++);
}
/**
* 맨 앞의 데이터 출력
*/
public int peek(){
if(front == rear) {
System.out.println("데이터가 존재하지 않습니다");
return -1;
}
return head.data;
}
/**
* 데이터 출력후 삭제
*/
public int poll(){
if(front == rear) {
System.out.println("데이터가 존재하지 않습니다");
return -1;
}
rear--;
ListNode delNode = head;
int data = delNode.data;
head = delNode.remove(head,0);
return data;
}
/**
* 맨앞의 데이터 삭제
*/
public void remove(){
if(front == rear) {
System.out.println("데이터가 존재하지 않습니다");
return;
}
rear--;
ListNode delNode = head;
head = delNode.remove(head,0);
}
/**
* 모든 데이터 삭제
*/
public void clear(){
while(front <= rear--){
head= head.remove(head,rear);
if(front == rear ) break;
}
System.out.println("모든 데이터 삭제 완료");
}
}
'Study > Spring & Java' 카테고리의 다른 글
[스터디 6주차] 상속 (0) | 2022.01.16 |
---|---|
[스터디 5주차] 클래스 (0) | 2022.01.09 |
[스터디 4주차] LinkedList로 Stack 구현 (0) | 2022.01.02 |
[스터디 4주차] Stack (0) | 2022.01.02 |
[스터디 4주차] LinkedList (0) | 2022.01.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 리스트
- 스터디
- 자바
- 리스트함축
- 이차 리스트
- It
- CS.
- 프로그래머스강의
- 데이터베이스
- 운영체제
- 알고리즘
- 코드업 기초
- 리스트 복사
- 네트워크
- 정렬
- CS 스터디
- 파이썬
- SW
- Greedy sort
- 이진탐색
- https
- 완전탐색
- 자료구조와알고리즘 23강
- 프로그래머스
- CS
- 연결리스트활용
- 보험
- 자료구조
- 프로세스 주소공간
- 리스트2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
글 보관함