-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCircularQueue.java
More file actions
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
public class CircularQueue<E> {
public ArrayList<E> elements;
/**
* the index of the front of the CircularQueue
*/
private int front;
/**
* the index of the rear of the CircularQueue
*/
private int rear;
/**
* The number of elements currently in the CircularQuue
*/
private int numElements;
/**
* The size of the CircularQueue - maximum number of elements it can hold
* without resizing
*/
private int size;
/**
* Constructs a CircularQueue with an initial capacity of 10
*/
public CircularQueue() {
elements = new ArrayList<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
*/
public CircularQueue(int num) {
elements = new ArrayList<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
*/
public void clear() {
elements = new ArrayList<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
*/
public boolean contains(Object e) {
for(int i = 0; i < elements.size(); i++) {
if(e.equals(elements.get(i))) return true;
}
return false;
}
/**
*
* @param arr the array to copy the elements of the CircularQueue
* over to (shallow copy)
* @param ind the index to begin copying from
*
*/
public void copyTo(E[] arr, int ind) {
for(int i = 0; i < elements.size(); i++) {
arr[ind+i] = elements.get(i);
}
}
/**
*
* @return the element at the front of the CircularQueue
*/
public E dequeue() {
if(numElements == 0){
throw new NullPointerException();
}
E element = elements.get(front);
elements.set(front, null);
if(front == size-1) front = 0;
else front++;
numElements--;
return element;
}
/**
*
* @param element the element to be placed at the rear of the queue
*/
public void enqueue(E element){
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
*/
public E get(int ind) {
int tempf = front;
int index = (tempf + ind)% numElements;
return elements.get(index);
}
/**
*
* @return the element at the front of the CircularQueue, does not remove
*/
public E peek() {
if(numElements == 0) {
throw new NullPointerException();
}
return elements.get(front);
}
public String toString() {
if(front == rear) return "[]";
int start = front, end = rear;
String str = "" + elements.get(start);
int add = 0;
if(start > rear) {
start -= elements.size();
add = elements.size();
}
for(int i = start+1; i < end; i++) {
if(i + add >= size()) {
str += ", " + elements.get(i);
}
else str += ", " + elements.get(i+add);
}
str = "[" + str + "]";
return str;
}
/**
*
* @return the size of the CircularQueue
*/
public int size() {
return size;
}
}