Heim > Java > javaLernprogramm > Löschen Sie alle sogar Elemente aus einem Stapel in Java

Löschen Sie alle sogar Elemente aus einem Stapel in Java

Patricia Arquette
Freigeben: 2025-02-07 11:32:09
Original
284 Leute haben es durchsucht

Delete all even elements from a stack in Java

Dieses Tutorial zeigt zwei Methoden zur Beseitigung von sogar Zahlen aus einem Java -Stapel. Stapel, die das LEFO-Prinzip (Last-In-First-Out) halten, stellen eine einzigartige Herausforderung für diese Art der Filterung dar. Die hier gezeigten Techniken sind an andere Filterszenarien anpassbar, die über die einfachen Zahlen hinausgehen.

Das Problem:

Schreiben Sie ein Java -Programm, um alle gleichmäßigen Zahlen zu entfernen.

Beispieleingänge und Ausgänge:

  • Eingabe 1: [1, 2, 3, 4, 5] Ausgabe 1: [1, 3, 5]
  • Eingabe 2: [1, 7, 3, 11, 9] Ausgabe 2: [1, 7, 3, 11, 9] (keine gleichmäßigen Zahlen zu entfernen)

Lösungsansätze:

Wir werden zwei unterschiedliche Ansätze untersuchen:

  1. Verwenden eines Hilfsstapels: Diese Methode verwendet einen temporären Stapel, um ungerade Zahlen zu speichern, während sie durch den Originalstapel iteriert.

  2. Verwenden von Rekursion: Dieser rekursive Ansatz verarbeitet den Stapel effizient und entzieht gleichmäßige Zahlen während der rekursiven Aufrufe.

Methode 1: Hilfsstapel

Dieser Ansatz beinhaltet die folgenden Schritte:

  1. Erstellen Sie ein temporäres Stack (z. B. tempStack).
  2. durch den Originalstapel iterieren und jedes Element knallen.
  3. Wenn das Element ungerade ist (prüfen Sie mit dem Modulo -Operator %), drücken Sie es auf tempStack.
  4. Sobald der Originalstapel leer ist, übertragen Sie Elemente von tempStack zurück zum Originalstapel.

Code -Beispiel (Hilfsstapel):

import java.util.Stack;

public class RemoveEvenElements {
    public static void removeEven(Stack<Integer> stack) {
        Stack<Integer> tempStack = new Stack<>();
        while (!stack.isEmpty()) {
            int element = stack.pop();
            if (element % 2 != 0) {
                tempStack.push(element);
            }
        }
        while (!tempStack.isEmpty()) {
            stack.push(tempStack.pop());
        }
    }

    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        removeEven(stack);
        System.out.println(stack); // Output: [1, 3, 5]
    }
}
Nach dem Login kopieren

Zeit- und Raumkomplexität (Hilfsstapel):

  • Zeitkomplexität: o (n) - Wir iterieren zweimal durch den Stapel.
  • Raumkomplexität: o (n) - Wir verwenden einen Hilfsstapel mit potenziell gleicher Größe wie der Eingangsstapel.

Methode 2: Rekursion

Diese rekursive Lösung behandelt die gleichmäßige Zahlenentfernung elegant:

  1. Basisfall: Wenn der Stapel leer ist, kehren Sie zurück.
  2. das obere Element pop.
  3. rufen Sie die Funktion removeEven rekursiv auf, um den verbleibenden Stapel zu verarbeiten.
  4. Nach dem rekursiven Anruf prüfen Sie, ob das gepackte Element ungerade ist. Wenn ja, schieben Sie es wieder auf den Stapel.

Code -Beispiel (Rekursion):

import java.util.Stack;

public class RemoveEvenElements {
    public static void removeEven(Stack<Integer> stack) {
        if (stack.isEmpty()) {
            return;
        }
        int element = stack.pop();
        removeEven(stack);
        if (element % 2 != 0) {
            stack.push(element);
        }
    }

    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        removeEven(stack);
        System.out.println(stack); // Output: [1, 3, 5]
    }
}
Nach dem Login kopieren

Zeit- und Raumkomplexität (Rekursion):

  • Zeitkomplexität: o (n) - Wir durchqueren den Stapel rekursiv.
  • Raumkomplexität: o (n) - Der rekursive Anrufstapel kann im schlimmsten Fall bis zur Größe des Eingangsstapels wachsen.

Schlussfolgerung:

Beide Methoden entfernen effektiv gleiche Zahlen aus einem Stapel. Der Hilfsstapelansatz ist einfacher, während der rekursive Ansatz eine prägnantere und möglicherweise etwas effizientere Lösung bietet (abhängig von der Optimierung des JVM). Die Wahl hängt von der persönlichen Präferenz und dem Codierungsstil ab. Denken Sie daran, dass diese Techniken an Filterstapeln basierend auf verschiedenen Kriterien angepasst werden können.

Das obige ist der detaillierte Inhalt vonLöschen Sie alle sogar Elemente aus einem Stapel in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Aktuelle Ausgaben
Kann Java als Backend des Webs verwendet werden?
Aus 1970-01-01 08:00:00
0
0
0
Installieren Sie JAVA
Aus 1970-01-01 08:00:00
0
0
0
Java kann nicht installiert werden
Aus 1970-01-01 08:00:00
0
0
0
Ist das in der Java-Sprache?
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage