1 队列

image-20191010085859717


2 Queue

1
2
3
4
5
6
7
8
public interface Queue<E> {

int getSize();
boolean isEmpty();
void enqueue(E e);
E dequeue();
E getFront();
}

#3 ArrayQueue

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
public class ArrayQueue<E> implements Queue<E> {

private Array<E> array;

public ArrayQueue(int capacity){
array = new Array<>(capacity);
}

public ArrayQueue(){
array = new Array<>();
}

@Override
public int getSize(){
return array.getSize();
}

@Override
public boolean isEmpty(){
return array.isEmpty();
}

public int getCapacity(){
return array.getCapacity();
}

@Override
public void enqueue(E e){
array.addLast(e);
}

@Override
public E dequeue(){
return array.removeFirst();
}

@Override
public E getFront(){
return array.getFirst();
}

@Override
public String toString(){
StringBuilder res = new StringBuilder();
res.append("Queue: ");
res.append("front [");
for(int i = 0 ; i < array.getSize() ; i ++){
res.append(array.get(i));
if(i != array.getSize() - 1)
res.append(", ");
}
res.append("] tail");
return res.toString();
}

public static void main(String[] args) {

ArrayQueue<Integer> queue = new ArrayQueue<>();
for(int i = 0 ; i < 10 ; i ++){
queue.enqueue(i);
System.out.println(queue);
if(i % 3 == 2){
queue.dequeue();
System.out.println(queue);
}
}
}
}

4 入队 enqueue array.addLast(e);

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
   @Override
public void enqueue(E e){
array.addLast(e);
}

----------------------------------------------------------------

// 向所有元素后添加一个新元素
public void addLast(E e){
add(size, e);
}
----------------------------------------------------------------
// 在index索引的位置插入一个新元素e
public void add(int index, E e){

if(index < 0 || index > size)
throw new IllegalArgumentException("Add failed. Require index >= 0 and index <= size.");

if(size == data.length)
resize(2 * data.length);

for(int i = size - 1; i >= index ; i --)
data[i + 1] = data[i];

data[index] = e;

size ++;
}
----------------------------------------------------------------

5 出队 dequeue array.removeFirst();

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
@Override
public E dequeue(){
return array.removeFirst();
}
----------------------------------------------------------------



public E remove(int index){
if(index < 0 || index >= size)
throw new IllegalArgumentException("Remove failed. Index is illegal.");

E ret = data[index];
for(int i = index + 1 ; i < size ; i ++)
data[i - 1] = data[i];
size --;
data[size] = null; // loitering objects != memory leak

if(size == data.length / 4 && data.length / 2 != 0)
resize(data.length / 2);
return ret;
}

// 从数组中删除第一个元素, 返回删除的元素
public E removeFirst(){
return remove(0);
}

6 队首元素 array.getFirst();

1
2
3
4
5
6
7
8
@Override
public E getFront(){
return array.getFirst();
}

public E getFirst(){
return get(0);
}