first commit
This commit is contained in:
114
java/queue/LinkedQueue.java
Normal file
114
java/queue/LinkedQueue.java
Normal file
@@ -0,0 +1,114 @@
|
||||
package queue;
|
||||
|
||||
/**
|
||||
* @author Doschennikov Nikita (me@fymio.us)
|
||||
*/
|
||||
public class LinkedQueue extends AbstractQueue {
|
||||
|
||||
private Node head;
|
||||
private Node tail;
|
||||
|
||||
private static class Node {
|
||||
|
||||
Object value;
|
||||
Node next;
|
||||
Node prev;
|
||||
|
||||
Node(Object value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
|
||||
public LinkedQueue() {
|
||||
head = null;
|
||||
tail = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enqueue(Object element) {
|
||||
assert element != null : "Element must not be null";
|
||||
Node node = new Node(element);
|
||||
if (tail == null) {
|
||||
head = tail = node;
|
||||
} else {
|
||||
node.prev = tail;
|
||||
tail.next = node;
|
||||
tail = node;
|
||||
}
|
||||
size++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void push(Object element) {
|
||||
assert element != null : "Element must not be null";
|
||||
Node node = new Node(element);
|
||||
if (head == null) {
|
||||
head = tail = node;
|
||||
} else {
|
||||
node.next = head;
|
||||
head.prev = node;
|
||||
head = node;
|
||||
}
|
||||
size++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object element() {
|
||||
assert size > 0 : "Queue is empty";
|
||||
return head.value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object peek() {
|
||||
assert size > 0 : "Queue is empty";
|
||||
return tail.value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object dequeue() {
|
||||
assert size > 0 : "Queue is empty";
|
||||
Object result = head.value;
|
||||
head = head.next;
|
||||
if (head != null) {
|
||||
head.prev = null;
|
||||
} else {
|
||||
tail = null;
|
||||
}
|
||||
size--;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object remove() {
|
||||
assert size > 0 : "Queue is empty";
|
||||
Object result = tail.value;
|
||||
tail = tail.prev;
|
||||
if (tail != null) {
|
||||
tail.next = null;
|
||||
} else {
|
||||
head = null;
|
||||
}
|
||||
size--;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object get(int i) {
|
||||
Node cur = head;
|
||||
for (int j = 0; j < i; j++) {
|
||||
cur = cur.next;
|
||||
}
|
||||
return cur.value;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void clearImpl() {
|
||||
head = null;
|
||||
tail = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AbstractQueue createEmpty() {
|
||||
return new LinkedQueue();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user