Created
December 15, 2012 11:19
-
-
Save villiger/4293911 to your computer and use it in GitHub Desktop.
D&A Aufgabensatz 4 - Dequeue
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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