Queue Methods
Queue Methods
1=<newStart<3
Let x = {1, 2, 3, 4, 5, 6}
To move the chosen indexes to the last index the newStart should be
equal to
public static <T> void moveTo(Queue<T> q, int start, int end, int
newStart) {
if(newStart == sizeQ(q)){
if (start == end) {
return;
}
Queue<T> tempQueue = new Queue<>();
Queue<T> movedElements = new Queue<>();
while (!tempQueue.isEmpty()) {
q.insert(tempQueue.remove());
}
}else {
Queue<T> temp = new Queue<>();
Queue<T> moved = new Queue<>();
int i = 0;
while (i < start) {
temp.insert(q.remove());
i++;
}
i = start;
while (i <= end) {
moved.insert(q.remove());
i++;
}
while (!q.isEmpty()) {
temp.insert(q.remove());
}
i = 0;
while (i < newStart) {
q.insert(temp.remove());
i++;
}
while (!moved.isEmpty()) {
q.insert(moved.remove());
}
while (!temp.isEmpty()) {
q.insert(temp.remove());
}
}
}
// creates a Queue of integers with the indexes at which there is val in
the Queue
while (!tempQueue.isEmpty()) {
T element = tempQueue.remove();
if (element.equals(val)) {
indices.insert(count);
}
count++;
}
return indices;
}
// removes every of the None first Occurrences of any value in a Q,
while (!queue.isEmpty()) {
T current = queue.remove();
if (!containsElementQ(uniqueElements, current)) {
uniqueElements.insert(current);
tempQueue.insert(current);
}
}
while (!tempQueue.isEmpty()) {
queue.insert(tempQueue.remove());
}
}
// inserts chosen value at chosen index, x = {1, 2, 3, 4}; insertQ(x, 0,
4) results in
x = {4, 1, 2, 3, 4}
while (!queue.isEmpty()) {
if (currentIndex == index) {
tempQueue.insert(value);
inserted = true;
}
tempQueue.insert(queue.remove());
currentIndex++;
}
if (index >= currentIndex) {
tempQueue.insert(value);
inserted = true;
}
if (!inserted) {
tempQueue.insert(value);
}
while (!tempQueue.isEmpty()) {
queue.insert(tempQueue.remove());
}
}
// sets the value at a specific index of a queue, x = {1, 2}; setQ(x, 0,
4); x = {4, 2}
results in x = {2, 3, 4}
public static <T> void deleteQ(Queue<T> queue, int index) {
while (!queue.isEmpty()) {
if (currentIndex != index) {
tempQueue.insert(queue.remove());
} else {
queue.remove();
}
currentIndex++;
}
while (!tempQueue.isEmpty()) {
queue.insert(tempQueue.remove());
}
}
while(!x.isEmpty()){
tempQueue.insert(x.head());
tempQueue2.insert(x.remove());
}
while (!tempQueue2.isEmpty()){
x.insert(tempQueue2.remove());
}
int size = 0;
while (!tempQueue.isEmpty()) {
tempQueue.remove();
size++;
}
return size;
}
while (!tempQ.isEmpty()) {
if (tempQ.remove().equals(value)) {
return true;
}
}
return false;
}
// reverses a Queue
while (!tempX.isEmpty()) {
T elementX = tempX.remove();
T elementY = tempY.head();
if (elementX.equals(elementY)) {
tempY.remove();
if (tempY.isEmpty()) {
return true;
}
} else {
tempY = copyQueueQ(y);
}
}
return false;
}
while (!queue.isEmpty()) {
T current = queue.remove();
if (current.equals(value)) {
count++;
}
tempQueue.insert(current);
}
while(!tempQueue.isEmpty()) queue.insert(tempQueue.remove());
return count;
}
T element = queue.remove();
reverseQB(queue, reversedQueue);
reversedQueue.insert(element);
}
while (!queue.isEmpty()) {
T frontElement = queue.remove();
T reversedElement = reversedQueue.remove();
if (!frontElement.equals(reversedElement)) {
return false;
}
}
return true;
}
while (!queue.isEmpty()) {
T current = queue.remove();
if (!current.equals(prev)) {
tempQueue.insert(current);
prev = current;
}
}
while (!tempQueue.isEmpty()) {
queue.insert(tempQueue.remove());
}
}
if(getQ(head, i) == value) {
deleteQ(head, i);
i--;
}
// splits a Queue into a Queue of Queues with the sizeQ of n,
resultQueue.insert(currentPart);
}
return resultQueue;
}
//creates a Queue which is the sorted version of queue
while (!queue.isEmpty()) {
int current = queue.remove();
Queue<Integer> tempQueue = new Queue<>();
boolean inserted = false;
while (!sortedQueue.isEmpty()) {
int value = sortedQueue.remove();
if (!inserted && current < value) {
tempQueue.insert(current);
inserted = true;
}
tempQueue.insert(value);
}
if (!inserted) {
tempQueue.insert(current);
}
while (!tempQueue.isEmpty()) {
sortedQueue.insert(tempQueue.remove());
}
}
return sortedQueue;
}
//The method takes the selected Queue(queue) and will create a new
splited Queue out of it according the the chosen start and end. for
example:
int index = 0;
while (!queue.isEmpty() && index < start) {
firstPart.insert(queue.remove());
index++;
}
if (!firstPart.isEmpty()) resultQueue.insert(firstPart);
if (!middlePart.isEmpty()) resultQueue.insert(middlePart);
if (!lastPart.isEmpty()) resultQueue.insert(lastPart);
return resultQueue;
}
//find the min value in the queue
while (!queue.isEmpty()) {
int current = queue.remove();
if (current < min) {
min = current;
}
tempQueue.insert(current);
}
while (!tempQueue.isEmpty())
queue.insert(tempQueue.remove());
return min;
}
//finds the max value in the queue
public static <T> int findMaxQ(Queue<Integer> queue) {
if (queue.isEmpty()) return 0; // a mistake it should return nothing
while (!queue.isEmpty()) {
int current = queue.remove();
if (current > max) {
max = current;
}
tempQueue.insert(current);
}
while (!tempQueue.isEmpty()) queue.insert(tempQueue.remove());
return max;
}
Magnitude of running time, Order of DE via degree of n
1. moveTo = O(n)
2. OcValQ = O(n)
3. removeNoneFirstOccurrencesQ = O(n)
4. insertQ = O(n)
5. setQ = O(n)
6. getQ = O(n)
7. copyQ = O(n)
8. delete = O(n)
9. sizeQ = O(n)
10. containsValueQ = O(n)
11. reverseQ = O(n)
12. subQ = O(n)
13. countOccQ = O(n)
14. reverseA = O(n)
15. isPalindrome = O(n)
16. removeConsecutiveOccurrences = O(n)
17. deleteQT = O(n^2)
18. splitQ = O(n)
19. sortQ = O(n)
20. CSplitQ = O(n)
21. findMinQ = O(n)
22. findMaxQ = O(n)
x.insert(1) – index 0
x.insert(2) – index 1
// The Queue class:
String str;
for(str = "["; pos != null; pos = pos.getNext()) {
str = str + pos.getValue().toString();
if (pos.getNext() != null) {
str = str + ",";
}
}
str = str + "]";
return str;
}