Back to the download page
// Object queue
//
// Author Matthew Caryl
//
// Although under copywrite to the author (Matthew Caryl) this code can be copied and modified for non-commercial
// purposes as long as any derivatives contain this condition.
package ADT;
final public class Queue {
int number = 0;
QueueItem front = null;
QueueItem back = null;
public Queue() {
}
public Queue(Queue q) {
try {
for (int i = q.size(); i > 0; i--)
enqueue(q.requeue());
}
catch (QueueEmpty e) {
}
}
public void finalise() {
clear();
}
public void enqueue(Object o) {
if (empty()) {
front = back = new QueueItem(o);
number = 1;
}
else {
back.next = new QueueItem(o);
back = back.next;
number++;
}
}
public Object dequeue() throws QueueEmpty {
QueueItem i;
if (empty())
throw new QueueEmpty();
i = front;
front = front.next;
i.next = null;
if (back == i)
back = null;
number--;
return i.item;
}
// returns the item from the front of the queue
public Object peekqueue() throws QueueEmpty {
if (empty())
throw new QueueEmpty();
return front.item;
}
// dequeue then enqueue
// returns the object which has been moved
public Object requeue() throws QueueEmpty {
if (empty())
throw new QueueEmpty();
back.next = front;
back = front;
front = front.next;
back.next = null;
return back.item;
}
// object to remove should be in queue
public void remove(Object o) throws QueueItemAbsent {
QueueItem p0, p, q;
p = front;
p0 = null;
q = null;
while (p != q)
if (p.item == o)
q = p;
else
{p0 = p; p = p.next;};
if (p == null)
throw new QueueItemAbsent();
if (p == front)
front = front.next;
if (p == back)
back = p0;
if (p0 != null)
p0.next = p.next;
number--;
}
public boolean membership(Object o) {
QueueItem p, q;
p = front;
q = null;
while (p != q)
if (p.item == o)
q = p;
else
p = p.next;
return p != null;
}
public int size() {
return number;
}
public boolean empty() {
return number == 0;
}
private void clear() {
try {
while (!empty())
dequeue();
}
catch (QueueEmpty e) {
}
}
}
class QueueItem extends Object {
Object item = null;
QueueItem next = null;
public QueueItem(Object o) {
item = o;
}
}
Back to the download page