반응형
링버퍼를 사용하면 디큐(deque)시 발생하는 요소 이동 문제를 해결할 수 있다.
2021/01/05 - [분류 전체보기] - 자바(JAVA)로 큐(Queue) 구현하기
public class IntQueue {
private int max;
private int num;
private int[] que;
private int front;
private int rear;
// 예외 : 큐가 비어 있음
class EmptyIntQueueException extends RuntimeException{
}
// 예외 : 큐가 가득 참
class OverflowIntQueueException extends RuntimeException{
}
public IntQueue(int capacity){
num = front = rear = 0;
max = capacity;
try{
que = new int[capacity];
}catch(OutOfMemoryError e){
max = 0;
}
}
public int enque(int x){
if(num >= max){
throw new OverflowIntQueueException();
}
que[rear++] = x;
num++;
if(rear == max){
rear = 0;
}
return x;
}
public int deque(){
if(num <= 0){
throw new EmptyIntQueueException();
}
int x = que[front++];
num--;
if(front == max){
front =0;
}
return x;
}
public int peek(){
if(num <= 0){
throw new EmptyIntQueueException();
}
return que[front];
}
public int indexOf(int x){
for(int i=0; i<num; i++){
int index = (front + i) % max;
if(que[index] == x)
return index;
}
return -1;
}
// 큐 안에서 몇 번째에 있는 양수인가를 반환
public int search(int x){
for(int i=0; i<num; i++){
if(que[(front + i) % max] == x){
return i+1;
}
}
return 0;
}
}
https://github.com/ksh901016/algo-practice/blob/main/src/main/java/queue/IntQueue.java
반응형
'프로그래밍 노트 > 자료구조' 카테고리의 다른 글
자바(JAVA)로 큐(Queue) 구현하기 (0) | 2021.01.05 |
---|---|
자바(JAVA)로 스택(stack)구현하기 (0) | 2021.01.05 |
[Think Data Structures] 이진탐색트리(TreeMap) 구현 및 분석_2 (0) | 2018.12.03 |
[Think Data Structures] 이진탐색트리(TreeMap) 구현 및 분석_1 (0) | 2018.12.03 |
[Think Data Structures] Java Map 인터페이스 구현 및 분석_3 (0) | 2018.11.07 |