2017-02-11 1 views
0

Ich verstand die traditionelle Art, entweder Push-Betrieb teuer oder pop-Betrieb teuer.Wie ein FIFO mit einem Stapel (LIFO) mit gleicher Komplexität für Push-und Pop-Operationen von FIFO implementieren

Wie macht man Push und Pop zu gleicher Komplexität?

+0

hat 2 Stapelzeiger einen zum schieben in und einen für – Spektre

+0

knallend aus kann ich nur push(), pop(), isempty() Funktionen eines Stapels verwenden. Es sind keine Zeiger erlaubt (Zeiger würden das Problem sehr einfach machen). –

+0

@PaulHankin: Ich versuche, die Komplexität der Insert() - und take() - Funktionen der Top-Antwort Ihres Links auszugleichen. –

Antwort

2

Dies ist Standard Interview Frage. Gemeinsame Idee: minus x minus = plus. Sie verwenden 2 sequenziert Stapel:

  • PUT setzt Daten auf einen Stapel 1.
  • GET extrahiert Daten aus dem Stapel 2.
  • Wenn Stack2 ist leer - kopieren alle vorhandenen Daten aus dem Stapel 1 zu stapeln 2, Element für Element, von oben 1 nach oben 2.
+0

+1. Aber bitte beachten Sie, dass dies zu einer * amortisierten * konstanten Zeit führt: die Pop-Operation wird immer wieder teuer (weil sie alles auf einmal kopieren muss), aber dies ergibt sich aus der konstanten Zeit, da die Kosten dafür Ein teurer "Pop" ist proportional zur Anzahl der nachfolgenden kostengünstigen "Pops". – ruakh