- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCircularQueue.java
More file actions
Latest commit
executable file
·157 lines (141 loc) · 3.44 KB
/
Copy pathCircularQueue.java
File metadata and controls
executable file
·157 lines (141 loc) · 3.44 KB
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
publicclassCircularQueue<E> {
publicArrayList<E> elements;
/**
* the index of the front of the CircularQueue
*/
privateintfront;
/**
* the index of the rear of the CircularQueue
*/
privateintrear;
/**
* The number of elements currently in the CircularQuue
*/
privateintnumElements;
/**
* The size of the CircularQueue - maximum number of elements it can hold
* without resizing
*/
privateintsize;
/**
* Constructs a CircularQueue with an initial capacity of 10
*/
publicCircularQueue() {
elements = newArrayList<E>();
front = 0; rear = 0; numElements = 0; size = 10;
}
/**
* Constructs a CircularQueue with an initial capacity of size num
* @param num the initial size of the CircularQueue
*/
publicCircularQueue(intnum) {
elements = newArrayList<E>(num);
front = 0; rear = 0; numElements = 0; size = num;
}
/**
* Clears the CircularQueue, default size is the same as it was before it
* was cleared
*/
publicvoidclear() {
elements = newArrayList<E>(size);
front = 0; rear = 0; numElements = 0;
}
/**
*
* @param num the value to check if contained in the CircularQueue
* @return true, if num is in the CircularQueue, or false, if num is not
*/
publicbooleancontains(Objecte) {
for(inti = 0; i < elements.size(); i++) {
if(e.equals(elements.get(i))) returntrue;
}
returnfalse;
}
/**
*
* @param arr the array to copy the elements of the CircularQueue
* over to (shallow copy)
* @param ind the index to begin copying from
*
*/
publicvoidcopyTo(E[] arr, intind) {
for(inti = 0; i < elements.size(); i++) {
arr[ind+i] = elements.get(i);
}
}
/**
*
* @return the element at the front of the CircularQueue
*/
publicEdequeue() {
if(numElements == 0){
thrownewNullPointerException();
}
Eelement = elements.get(front);
elements.set(front, null);
if(front == size-1) front = 0;
elsefront++;
numElements--;
returnelement;
}
/**
*
* @param element the element to be placed at the rear of the queue
*/
publicvoidenqueue(Eelement){
if(rear < front) {
elements.add(rear, element);
numElements++;
rear++;
return;
}
elements.add(rear, element);
numElements++;
rear++;
}
/**
*
* @param ind the index of the CircularQueue to retrieve
* @return the value of the CircularQueue at index ind
*/
publicEget(intind) {
inttempf = front;
intindex = (tempf + ind)% numElements;
returnelements.get(index);
}
/**
*
* @return the element at the front of the CircularQueue, does not remove
*/
publicEpeek() {
if(numElements == 0) {
thrownewNullPointerException();
}
returnelements.get(front);
}
publicStringtoString() {
if(front == rear) return"[]";
intstart = front, end = rear;
Stringstr = "" + elements.get(start);
intadd = 0;
if(start > rear) {
start -= elements.size();
add = elements.size();
}
for(inti = start+1; i < end; i++) {
if(i + add >= size()) {
str += ", " + elements.get(i);
}
elsestr += ", " + elements.get(i+add);
}
str = "[" + str + "]";
returnstr;
}
/**
*
* @return the size of the CircularQueue
*/
publicintsize() {
returnsize;
}
}