Startseite < Informatik < Algorithmen Datenstrukturen < Stack [ DRUCK , 2004 , 2005 , 2006 , 2007 , 2008 , 2009 ] Queue < Dequeue PriorityQueue > Tree > / Software-Engineering / Programmiersprachen / Künstliche Intelligenz > Schach Privates / Inhalt >
Queue
Eine listenähnliche Datenstruktur mit dem FIFO-Prinzip heißt Queue oder Warteschlange.
Einführung Theorie: Queue
Definition
Die Queue, auch Warteschlange genannt, ist eine listenähnliche Datenstruktur, in die nur an einem Ende (rear) eingefügt (insert) und am anderen Ende (front) gelöscht (remove) werden kann — ganz nach dem FIFO-Prinzip: First In, First Out!
Mögliche Schnittstelle: Queue
interface Queue {

  /* Prüft, ob die Queue leer ist. */
  public boolean isEmpty();

  /* Fügt ein neues (rear-) Element an. */
  public void insert(Object element);

  /* Löscht das front-Element heraus und gibt es zurück. */
  public Object remove();
}
Beispiele
In der realen Welt trifft man recht oft eine Warteschlange an wie zum Beispiel
  • Beim Samstagseinkauf
    Eine Queue kennt eigentlich jeder, der schon einmal beim Samstagseinkauf an der Kasse warten musste: Wer zuerst kommt, zahlt zuerst. Hat sich eine Menschenschlange an der Kasse gebildet, stellt man sich, wenn man es nicht gerade riskieren möchte, von den anderen der Schlange übelst beschimpft zu werden, hinten an und wartet bis man selbst an der Reihe ist; an der Kasse bildet sich eine Warteschlange. Bei einer Warteschlange im Sinne der hier behandelten Queue gibt es keine Vordrängler!
  • An der Ampel
    Im Strassenverkehr bilden sich hinter einer roten Ampel nach und nach immer länger werdende Autoschlangen. Es gilt die Regel: Wer zuerst kommt, fährt zuerst.
Implementierung Implementierung: Queue
Die Queue ist ja sozusagen eine Liste, in die man Elemente hinten anhängt und vorne herausnimmt. In Java gibt es bereits eine Klasse, die genau diese Operationen bereitstellt: die LinkedList.
Realisierung der Queue mittels LinkedList
import java.util.LinkedList;

public class LinkedListQueue implements Queue {

  private LinkedList buffer;

  public LinkedListQueue() {
    this.buffer = new LinkedList();
  }

  public boolean isEmpty() {
    return (this.buffer.size() <= 0);
  }

  public void insert(Object element) {
    this.buffer.addLast(element); // rear-Element
  }

  public Object remove() {
    return this.buffer.removeFirst(); // front-Element
  }
}