Maison >Java >javaDidacticiel >Supprimez tous les éléments même d'une pile à Java
Ce tutoriel montre deux méthodes pour éliminer les nombres uniformes d'une pile Java. Les piles, adhérant au dernier principe de sortie (LIFO), présentent un défi unique pour ce type de filtrage. Les techniques montrées ici sont adaptables à d'autres scénarios de filtrage au-delà de simplement éliminer les nombres.
Le problème:
Compte tenu d'une pile d'entiers, écrivez un programme Java pour supprimer tous les nombres pair.
Exemples d'entrées et de sorties:
[1, 2, 3, 4, 5]
Sortie 1: [1, 3, 5]
[1, 7, 3, 11, 9]
Sortie 2: [1, 7, 3, 11, 9]
(pas de nombres même à supprimer) Approches de la solution:
Nous explorerons deux approches distinctes:
à l'aide d'une pile auxiliaire: Cette méthode utilise une pile temporaire pour stocker des nombres impairs tout en itérant à travers la pile d'origine.
Utilisation de la récursivité: Cette approche récursive traite efficacement la pile, en supprimant même les nombres pendant les appels récursifs.
Méthode 1: pile auxiliaire
Cette approche implique ces étapes:
Stack
temporaire (par exemple, tempStack
). %
), poussez-le sur tempStack
. tempStack
à la pile d'origine. Exemple de code (pile auxiliaire):
<code class="language-java">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] } }</integer></integer></integer></code>
Complexité du temps et de l'espace (pile auxiliaire):
Méthode 2: Recursion
Cette solution récursive gère élégamment l'élimination du nombre uniforme:
removeEven
pour traiter la pile restante. Exemple de code (Recursion):
<code class="language-java">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] } }</integer></integer></code>
Complexité du temps et de l'espace (récursivité):
Conclusion:
Les deux méthodes suppriment efficacement les nombres même d'une pile. L'approche de la pile auxiliaire est plus simple, tandis que l'approche récursive offre une solution plus concise et potentiellement légèrement plus efficace (selon l'optimisation du JVM). Le choix dépend de la préférence personnelle et du style de codage. N'oubliez pas que ces techniques peuvent être adaptées pour filtrer les piles en fonction de divers critères.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!