Während der Interviews erscheinen häufig Stapel und Warteschlangen zu paaren, um zu untersuchen. Dieser Artikel enthält den folgenden Testinhalt für Stack und Warteschlangen:
(1) Schöpfung von Stapel
(2) Warteschlangeschöpfung
(3) Zwei Stapel implementieren eine Warteschlange
(4) Zwei Warteschlangen implementieren einen Stapel
(5) Entwerfen Sie einen Stapel mit der minimalen Funktion min () und erfordert, dass die zeitliche Komplexität von min, Push, Pop und alle o (1) sind
(6) Bestimmen Sie, ob die Push- und Pop -Sequenzen des Stapels konsistent sind
1. Stapelerstellung:
Als nächstes erstellen wir einen Stapel in Form einer verknüpften Liste, um die Erweiterung zu erleichtern.
Code -Implementierung:
öffentliche Klasse Stack {öffentlicher Knoten; Node node = neuer Knoten (Daten); } public node pop () {if (current == null) {return null; Knoten auf den Stapel, aktuell zurück, einen Returnknoten;} Klasse -Knoten {int data; }} public static void main (String [] args) {stack = new stack (); pop ().Bei der Eingabe des Stapels sind 14 oder 15 Codezeilen der Schlüssel.
Laufeffekt:
2. Kreation der Warteschlange:
Es gibt zwei Formen der Warteschlangenerstellung: basierend auf der Implementierung von Arraystruktur (sequentielle Warteschlange) und basierend auf der Implementierung der verknüpften Listenstruktur (Kettenwarteschlange).
Als nächstes werden wir eine Warteschlange in Form einer verknüpften Liste erstellen, damit die Warteschlange bei der Erweiterung bequemer ist. Wenn die Warteschlange dequed ist, beginnen Sie vom Beginn des Knotenkopfes.
Code -Implementierung:
Wenn Sie den Stapel betreten, ist es das gleiche wie das Hinzufügen von Knoten in einer gewöhnlichen verknüpften Liste.
öffentliche Klasse Queue {öffentlicher Knoten; } else {current.Next = neuer Knoten (Daten); "Warteschlange ist leer"); Daten; i = 0 i <5; .out.println (queue.pop ());}}Laufeffekt:
3. Zwei Stapel implementieren eine Warteschlange:
Ideen:
Stack 1 wird verwendet, um Elemente zu speichern. Stack 2 wird verwendet, um Popelemente zu popieren, negativ und negativ sind positiv.
Einfach ausgedrückt, geben Sie jetzt die Daten 1, 2 und 3 in Stapel ein, dann kommen Sie aus Stack One (3, 2, 1) und geben Sie es in Stapel zwei, dann die Daten aus Stapel zwei (1, 2,3) Es entspricht den Regeln der Warteschlange, dh negativ und negativ sind positiv.
Vollversion der Code -Implementierung:
Importieren Sie Java.util.stack;/*** Erstellt von Smyhvae am Jahr 2015/9/9. Stapel <Gefeger> Stack2 = neuer Stack <> (); // Stack zur Ausführung von Dequeue -Operationen // Methode: Fügen Sie der Warteschlange Public Void Push (int data) {stack1.push (Daten);}//Methode einen Enqueue -Betrieb hinzu;}//Methode : Geben Sie der Warteschlange eine Dequeue -Operation public int pop () aus Ausnahme {if (stack2.eMpty ()) {// Bevor Sie die Daten in Stack1 in Stack2 einsetzen, müssen Sie sicherstellen, dass Stack2 leer ist (oder am Anfang leer ist, leer, leer, Entweder wurden die Daten in Stack2 veröffentlicht), sonst wird die Reihenfolge von Dequeingo durcheinander Daten in Stack1 und setzen Sie es in Stack2 [Core Code]}} if (stack2.eMpty ()) {// Wenn Stack2 leer ist, gibt es zwei Möglichkeiten: 1. Am Anfang sind zwei Stapel alle Daten leer; Die Daten in Stack2 sind eine neue Ausnahme ("Queu ist leer"); Push (1); );Achten Sie auf die Reihenfolge des Code in Zeile 22 und Zeile 30 sowie auf die Kommentare, und Sie müssen seine Bedeutung sorgfältig verstehen.
Laufeffekt:
4. Zwei Warteschlangen implementieren einen Stapel:
Ideen:
Stellen Sie 1, 2 und 3 in die Warteschlange 1 ein, lassen Die in der Warteschlange 2 sind gelassen. . . Zirkulieren wiederum.
Code -Implementierung:
Import Java.util.Arraydeque; Import Java.util.queue;/*** Erstellt von Smyhvae am Jahr 2015/9/9 <Neger> queue2 = new ArrayDeque <Gearner> (); // Methode: Stack Operation Public void push (int data) {queue1.add (data); int data; {data = queue1.poll (); queue1.poll ()); = neuer Stack (); Stack.push (1); ));Laufeffekt:
5. Entwerfen Sie einen Stapel mit der minimalen Funktion min () und erfordert, dass die zeitliche Komplexität von min, Push, Pop und alle o (1) sind. Der Zweck der min -Methode ist: Sie kann den Mindestwert im Stapel zurückgeben. 【WeChat -Interview Fragen】
Gewöhnliche Ideen:
Im Allgemeinen denken wir vielleicht so: Verwenden der Min -Variablen, jedes Mal, wenn wir ein Element hinzufügen, wird es mit dem min -Element verglichen, damit der in min gespeicherte Mindestwert garantiert werden kann. Aber in diesem Fall wird es ein Problem geben: Wenn das kleinste Element nicht im Stapel ist, wie können Sie wissen, welches der verbleibenden Elemente das kleinste Element ist?
Verbesserungsideen:
Hier müssen Sie einen Auxiliary -Stapel hinzufügen, um den Zeitraum für die Zeit auszutauschen. Im Auxiliary -Stapel spart die Oberseite des Stapels immer den kleinsten Wert im aktuellen Stapel. Es ist spezifisch: Jedes Mal, wenn ein neues Element im Originalstapel hinzugefügt wird, wird es mit dem oberen Element des Auxiliary -Stapels verglichen Das Element ist groß und kopieren Sie dann das obere Element des Hilfsstapels an die Oberseite des Hilfsstapels.
Vollständige Code -Implementierung:
Importieren Sie Java.util.stack;/*** Erstellt von Smyhvae am Jahr 2015/9/9. neuer Stack <Geeing <Geeing> (); /In der Auxiliary if (minstack.size () == 0 || Daten <minstack.peek ()) {minstack.push (data); Code] Die Peek -Methode gibt das Element oben im Stack}} public int pop () aus Ausnahme {if (stack.size () == 0) {Neue Ausnahme ("leer im Stack"); Data = stack.pop (); Hollow ");} return minstack.peek ();} public static void main (String [] args) löst eine Ausnahme aus {minstack stack = new minstack (); Stack.push (4); Stack.pus H (3); Stack; Stack; .push (5); System.out.println (stack.min ());Laufeffekt:
6. Bestimmen Sie, ob die Push- und Pop -Sequenzen des Stapels konsistent sind:
Einfach ausgedrückt: Es ist bekannt, dass eine Reihe von Daten 1, 2, 3, 4 und 5 nacheinander in den Stapel gesteckt werden, sodass es viele Möglichkeiten gibt, ihn herauszubringen. ?
Zum Beispiel:
Daten:
1, 2, 3, 4, 5
Ausgabe 1:
5, 4, 3, 2, 1 (richtig)
Ausgabe 2:
4, 5, 3, 2, 1 (richtig)
Ausgabe 3:
4, 3, 5, 1, 2 (Fehler)
Vollversionscode:
Import Java.util.stack;/*** Erstellt von Smyhvae am Jahr 2015/9/9.
*/
öffentliche Klasse StackTest {
// Methode: Die Reihenfolge der Data1 -Arrays gibt die Reihenfolge der Stapelung an. Beurteilen Sie nun, ob die Stapelordnung von Data2 korrekt ist.
public static boolean sequenceispop (int [] data1, int [] data2) {
Stack <Neger> Stack = new Stack <Gearner> ();
für (int i = 0, j = 0; i <data1.length; i ++) {
stack.push (data1 [i]);
while (stack.size ()> 0 && stack.peek () == data2 [j]) {
stack.pop ();
J ++;
}
}
return stack.size () == 0;
}
public static void main (String [] args) {
Stack <GanzEger> Stack = new Stack <GanzEger> ();
int [] data1 = {1, 2, 3, 4, 5};
int [] data2 = {4, 5, 3, 2, 1};
int [] data3 = {4, 5, 2, 3, 1};
System.out.println (SequenceiSPOP (Data1, Data2));
System.out.println (sequenceispop (data1, data3));
}
}
Der Code ist relativ präzise, aber es ist auch schwer zu verstehen, daher müssen Sie ihn sorgfältig verstehen.
Laufeffekt:
Die oben genannten Interviewfragen zu Java Stack und Warteschlangen. Ich hoffe, dass sie jedem reibungslos weitergeben können.