-
Notifications
You must be signed in to change notification settings - Fork 0
/
ArrayDeque.java
115 lines (95 loc) · 2.14 KB
/
ArrayDeque.java
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
109
110
111
112
113
114
115
package Bai1;
import java.util.Iterator;
public class ArrayDeque<E> implements DequeADT <E> {
public static final int CAPACITY=100000;
private E[] data;
private int frontDeque = 0;
private int backDeque = 0;
private int sizeDeque = 0;
public ArrayDeque(int capacity) {
data = (E[]) new Object[capacity];
}
public ArrayDeque() {
this(CAPACITY);
}
@Override
public void enqueueRear(E element) {
// TODO Auto-generated method stub
if(sizeDeque == CAPACITY) return;
if(sizeDeque == 0) {
data[backDeque] = element;
}
else {
backDeque = (backDeque + 1)%CAPACITY;
data[backDeque] = element;
}
sizeDeque++;
}
@Override
public E dequeueFront() {
// TODO Auto-generated method stub
if(isEmpty()) return null;
E value = data[frontDeque];
frontDeque = (frontDeque + 1)% CAPACITY;
sizeDeque--;
return value;
}
@Override
public E first() {
if(!isEmpty()) return data[frontDeque];
return null;
}
@Override
public E last() {
if(!isEmpty()) return data[backDeque];
return null;
}
@Override
public void enqueueFront(E element) {
// TODO Auto-generated method stub
if(sizeDeque == CAPACITY) return;
if(sizeDeque == 0) {
data[frontDeque] = element;
}
else {
frontDeque = (frontDeque - 1 + CAPACITY) % CAPACITY;
data[frontDeque] = element;
}
sizeDeque++;
}
@Override
public E dequeueRear() {
if(isEmpty()) return null;
E item = data[backDeque];
backDeque = (backDeque - 1 + CAPACITY) % CAPACITY;
sizeDeque--;
return item;
}
@Override
public boolean isEmpty() {
return sizeDeque == 0;
}
@Override
public int size() {
return sizeDeque;
}
@Override
public Iterator<E> iterator() {
Iterator<E> it = new Iterator<>() {
private int currentIndex = frontDeque;
@Override
public boolean hasNext() {
if(currentIndex != backDeque) return true;
return false;
}
@Override
public E next() {
while(currentIndex != backDeque) {
currentIndex = (currentIndex + 1)%CAPACITY;
}
return null;
}
};
return it;
}
}