Skip to content

Instantly share code, notes, and snippets.

@villiger
Created December 15, 2012 11:19
Show Gist options
  • Save villiger/4293911 to your computer and use it in GitHub Desktop.
Save villiger/4293911 to your computer and use it in GitHub Desktop.
D&A Aufgabensatz 4 - Dequeue
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
* Primitive Dequeue-Klasse, die ohne Generics implementiert wurde.
*
* @author Andy Villiger
*/
public class Dequeue {
public class DequeueIterator implements Iterator {
private Dequeue queue;
private Element current;
public DequeueIterator(Dequeue queue) {
this.queue = queue;
this.current = queue.front;
}
@Override
public boolean hasNext() {
return (current.next.value != null);
}
@Override
public Object next() {
current = current.next;
if (current.value != null) {
return current.value;
}
throw new NoSuchElementException();
}
@Override
public void remove() {
queue.remove(current.value);
}
public Element getCurrent() {
return current;
}
}
public class Element {
public Element prev;
public Element next;
public Object value;
}
private Element front;
private Element back;
public Dequeue() {
front = new Element();
back = new Element();
front.next = back;
back.prev = front;
}
public void pushBack(Object object) {
Element element = new Element();
element.value = object;
element.prev = back.prev;
element.next = back;
element.prev.next = element;
back.prev = element;
}
public void pushFront(Object object) {
Element element = new Element();
element.value = object;
element.next = front.next;
element.prev = front;
element.next.prev = element;
front.next = element;
}
public Object popBack() {
Object value = back.prev.value;
if (value != null) {
back.prev = back.prev.prev;
back.prev.next = back;
}
return value;
}
public Object popFront() {
Object value = front.next.value;
if (value != null) {
front.next = front.next.next;
front.next.prev = front;
}
return value;
}
public Object back() {
return back.prev.value;
}
public Object front() {
return front.next.value;
}
public DequeueIterator iterator() {
return new DequeueIterator(this);
}
public void remove(Object object) {
DequeueIterator it = iterator();
while(it.hasNext()) {
Object current = it.next();
if (current.equals(object)){
Element prev = it.getCurrent().prev;
Element next = it.getCurrent().next;
prev.next = next;
next.prev = prev;
return;
}
}
}
@Override
public String toString() {
String result = new String();
DequeueIterator it = iterator();
while(it.hasNext()) {
Object current = it.next();
if (result.length() > 0) {
result += ", ";
}
result += current;
}
return result;
}
public static void main(String[] args) {
Dequeue queue = new Dequeue();
queue.pushBack("Hello");
queue.pushBack("World");
queue.pushFront("Mega");
System.out.println(queue);
queue.remove("Mega");
System.out.println(queue);
queue.popBack();
System.out.println(queue);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment