feat: move everything to single folder
This commit is contained in:
125
cs2030s/Lab1/Queue.java
Normal file
125
cs2030s/Lab1/Queue.java
Normal file
@@ -0,0 +1,125 @@
|
||||
/**
|
||||
* The Queue class implements a simple FIFO data structure
|
||||
* with limited capacity that can store any Object instances.
|
||||
* Not to be confused with java.util.Queue.
|
||||
*
|
||||
* @author Yadunand Prem
|
||||
* @version CS2030S AY21/22 Semester 2
|
||||
*/
|
||||
class Queue<T> {
|
||||
/** An array to store the items in the queue. */
|
||||
private T[] items;
|
||||
|
||||
/** Index of the first element in the queue. */
|
||||
private int first;
|
||||
|
||||
/** Index of the last element in the queue. */
|
||||
private int last;
|
||||
|
||||
/** Maximum size of the queue. */
|
||||
private int maxSize;
|
||||
|
||||
/** Number of elements in the queue. */
|
||||
private int len;
|
||||
|
||||
/**
|
||||
* Constructor for a queue.
|
||||
*
|
||||
* @param size The maximum num of elements we can put in the queue.
|
||||
*/
|
||||
public Queue(int size) {
|
||||
this.maxSize = size;
|
||||
// The only way to add values to `items` is via enq(), and we can only put
|
||||
// objects of type T via that method. Thus, it is safe to cast Comparable[]
|
||||
// to T[].
|
||||
@SuppressWarnings("unchecked")
|
||||
T[] temp = (T[]) new Object[size];
|
||||
this.items = temp;
|
||||
this.first = -1;
|
||||
this.last = -1;
|
||||
this.len = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the object e into the queue.
|
||||
*
|
||||
* @param e The item to put in the queue.
|
||||
* @return false if the queue is full; true if e is added successfully.
|
||||
*/
|
||||
public boolean enq(T e) {
|
||||
if (this.isFull()) {
|
||||
return false;
|
||||
}
|
||||
if (this.isEmpty()) {
|
||||
this.first = 0;
|
||||
this.last = 0;
|
||||
} else {
|
||||
this.last = (this.last + 1) % this.maxSize;
|
||||
}
|
||||
this.items[last] = e;
|
||||
this.len += 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the object from the queue.
|
||||
*
|
||||
* @return null if the queue is empty; the object removed from the queue
|
||||
* otherwise.
|
||||
*/
|
||||
public T deq() {
|
||||
if (this.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
T item = this.items[this.first];
|
||||
this.first = (this.first + 1) % this.maxSize;
|
||||
this.len -= 1;
|
||||
return item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the queue is full.
|
||||
*
|
||||
* @return true if the queue is full; false otherwise.
|
||||
*/
|
||||
boolean isFull() {
|
||||
return (this.len == this.maxSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the queue is empty.
|
||||
*
|
||||
* @return true if the queue is empty; false otherwise.
|
||||
*/
|
||||
boolean isEmpty() {
|
||||
return (this.len == 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of elements in the queue.
|
||||
*
|
||||
* @return The number of elements in the queue.
|
||||
*/
|
||||
public int length() {
|
||||
return this.len;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the string representation of the queue.
|
||||
*
|
||||
* @return A string consisting of the string representation of
|
||||
* every object in the queue.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
String str = "[ ";
|
||||
int i = this.first;
|
||||
int count = 0;
|
||||
while (count < this.len) {
|
||||
str += this.items[i] + " ";
|
||||
i = (i + 1) % this.maxSize;
|
||||
count++;
|
||||
}
|
||||
return str + "]";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user