465 Stimmen

Wie implementiert man eine Warteschlange mit zwei Stapeln?

Angenommen, wir haben zwei Stapel und keine andere temporäre Variable.

Ist es möglich, eine Warteschlangen-Datenstruktur nur mit den beiden Stapeln zu "konstruieren"?

0 Stimmen

Um zu lachen, implementieren Sie beide Stapel in ein einziges Array, wobei einer von jedem Ende aus zu dem anderen wächst. Vergleichen Sie die Reihenfolge der Top-of-Stapel mit einer direkten Array-Implementierung der Warteschlange.

-2voto

realPK Punkte 2222

Implementierung einer Warteschlange mit zwei java.util.Stack-Objekten:

public final class QueueUsingStacks<E> {

        private final Stack<E> iStack = new Stack<>();
        private final Stack<E> oStack = new Stack<>();

        public void enqueue(E e) {
            iStack.push(e);
        }

        public E dequeue() {
            if (oStack.isEmpty()) {
                if (iStack.isEmpty()) {
                    throw new NoSuchElementException("No elements present in Queue");
                }
                while (!iStack.isEmpty()) {
                    oStack.push(iStack.pop());
                }
            }
            return oStack.pop();
        }

        public boolean isEmpty() {
            if (oStack.isEmpty() && iStack.isEmpty()) {
                return true;
            }
            return false;
        }

        public int size() {
            return iStack.size() + oStack.size();
        }

}

3 Stimmen

Dieser Code ist funktionell identisch mit der Antwort von Dave L. Er fügt nichts Neues hinzu, nicht einmal eine Erklärung.

0 Stimmen

Sie fügt die Methoden isEmpty() und size() sowie eine grundlegende Ausnahmebehandlung hinzu. Ich werde es bearbeiten, um eine Erklärung hinzuzufügen.

1 Stimmen

Niemand hat nach diesen zusätzlichen Methoden gefragt, und sie sind trivial (jeweils eine Zeile): return inbox.isEmpty() && outbox.isEmpty()return inbox.size() + outbox.size() . Der Code von Dave L. löst bereits eine Exception aus, wenn man von einer leeren Warteschlange dequeue. Die ursprüngliche Frage bezog sich nicht einmal auf Java; es ging um Datenstrukturen/Algorithmen im Allgemeinen. Die Java-Implementierung war nur eine zusätzliche Veranschaulichung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X