Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
108 lines (93 loc) · 2.39 KB

File metadata and controls

108 lines (93 loc) · 2.39 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package queue.impl;
/**
* 循环队列
* <p>
* front == tail 队列为空
* <p>
* front == (tail+1)/c c为长度 队列为满
* <p>
* 复杂度分析
* 算法优化:
*
*/
public class LoopQueue<E> implements Queue<E> {
private E[] data;
private int front, tail;
private int size;
public LoopQueue(int capacity) {
this.data = (E[]) new Object[capacity + 1];
this.front = 0;
this.tail = 0;
this.size = 0;
}
public LoopQueue() {
this(10);
}
////O(1)
@Override
public void enqueue(E e) {
if ((tail + 1) % data.length == front) {
resize(getCapacity() * 2);
}
data[tail] = e;
tail = (tail + 1) % data.length;
size++;
}
//O(1)
@Override
public E dequeue() {
if (isEmpty()) {
throw new IllegalArgumentException("Can not dequeue from an empty Queue");
}
E ret = data[front];
data[front] = null;
front = (front + 1) % data.length;
size--;
//缩容
if (size == getCapacity() / 4 && getCapacity() / 2 != 0) {
resize(getCapacity() / 2);
}
return null;
}
@Override
public E getFront() {
if (isEmpty()) {
throw new IllegalArgumentException("Can not dequeue from an empty Queue");
}
return data[front];
}
@Override
public int getSize() {
return size;
}
@Override
public boolean isEmpty() {
return front == tail;
}
public int getCapacity() {
return data.length - 1;
}
private void resize(int newCapacity) {
E[] newData = (E[]) new Object[newCapacity + 1];
for (int i = 0; i < size; i++) {
newData[i] = data[(i + front) * data.length];
}
data = newData;
front = 0;
tail = size;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(String.format("Queue:Size = %d , capacity = %d \n", getSize(), getCapacity()));
builder.append("front [");
for (int i = front; i != tail; i = (i + 1) % data.length) {
builder.append(data[i]);
if ((i + 1) % data.length != tail) {
builder.append(", ");
}
}
builder.append("] tail");
return builder.toString();
}
}
Morty Proxy This is a proxified and sanitized view of the page, visit original site.