Java 루프 큐 구현
1 public class LoopQueue {
2
3 private E[] data;
4 private int front; //
5 private int tail; //
6 private int size;
7
8 public LoopQueue(int capacity) {
9 data = (E[]) new Object[capacity + 1];
10 front = 0;
11 tail = 0;
12 size = 0;
13 }
14
15 public LoopQueue() {
16 this(10);
17 }
18
19 public int getCapacity() {
20 return data.length - 1;
21 }
22
23 public int getSize() {
24 return size;
25 }
26
27 public boolean isEmpty() {
28 return front == tail;
29 }
30
31 public boolean isFull() {
32 return (tail + 1) % data.length == front;
33 }
34 //
35 public void enqueue(E e) {
36 if (isFull()) {
37 resize(getCapacity() * 2);
38 }
39 data[tail] = e;
40 tail = (tail + 1) % data.length;
41 size++;
42 }
43
44 private void resize(int newCapacity) {
45 E[] newArr = (E[]) new Object[newCapacity + 1];
46 for (int i = 0; i < size; i++) {
47 newArr[i] = data[(front + i) % data.length];
48 }
49 data = newArr;
50 front = 0;
51 tail = size;
52 }
53 //
54 public E dequeue() {
55 if (isEmpty()) {
56 throw new IllegalArgumentException("Cannot dequeue from an empty queue");
57 }
58 E res = data[front];
59 data[front] = null;
60 front = (front + 1) % data.length;
61 size--;
62 if (size == getCapacity() / 4 && getCapacity() / 2 != 0) {
63 resize(getCapacity() / 2);
64 }
65 return res;
66 }
67
68 public E getFront() {
69 if (isEmpty()) {
70 throw new IllegalArgumentException("Cannot dequeue from an empty queue");
71 }
72 return data[front];
73 }
74
75 @Override
76 public String toString() {
77 StringBuilder str = new StringBuilder();
78 str.append(String.format("Queue: size = %d, capacity = %d
", size, getCapacity()));
79 str.append("front [");
80 for (int i = front; i != tail; i = (i + 1) % data.length) {
81 str.append(data[i]);
82 if ((i + 1) % data.length != tail) {
83 str.append(", ");
84 }
85 }
86 str.append("] tail");
87 return str.toString();
88 }
89
90 public static void main(String[] args) {
91 LoopQueue queue = new LoopQueue<>();
92 for (int i = 0; i < 10; i++) {
93 queue.enqueue(i);
94 System.out.println(queue);
95 if (i % 3 == 2) {
96 queue.dequeue();
97 System.out.println(queue);
98 }
99 }
100 }
101 }
전재 대상:https://www.cnblogs.com/rabbitli/p/11255603.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.