Hier ist ein wenig Auftakt zu der allgemeineren Frage, über die ich mich wundere:Woher weiß ich, wann ich einen Stapel anstelle von anderen Sammlungen verwenden soll?
Ich habe vor kurzem eine Programmieraufgabe, wo Sie eine Methode schreiben sollen, die das Gleichgewicht der Klammern in einem bestimmten String überprüft. Die Methode sollte einen String aufnehmen und den Index zurückgeben, bei dem der erste Zusatz ')' oder '(' Klammern, oder die Länge des Strings, wenn sie gleich sind. Einige Beispieleingaben wären wie folgt: ") (asdf))) "- 0; (((asdf))) "- 0;" (((asdf)) "- 1;" (ab) ((cd) (asdf) "- 5.
Ich begann mit dem Versuch Erstellen Sie eine Liste für jede Richtung von Klammern, die die Indizes von allen in der Zeichenfolge speichern würde.Ich würde dann jedes Zeichen in der Zeichenfolge durchlaufen, fügen Sie den Index zu einer der beiden Listen hinzu, wenn sie übereinstimmen, und prüfen Sie, ob sie bereits vorhanden waren Diese Strategie funktionierte für einige der Fälle, aber bestimmte Szenarien scheiterten noch immer.Wenn ich festgefahren war, überprüfte ich einige der anderen Antworten auf die Herausforderung und sah, dass sie einen Stapel verwendeten, um den Index der linken Klammern zu speichern und pop von, wenn nötig.Dieser Weg arbeitete viel, viel besser, und ich fühlte mich ein wenig peinlich für nicht daran denken selbst.
Das bringt mich zu meiner Frage ... wie mache ich kn Wenn es besser ist, einen Stack gegenüber anderen verschiedenen Collections zu verwenden? Was sind einige häufige Dinge, die mich dazu bringen können, einen Stack gegenüber einer anderen Collection zu verwenden?
Ich weiß, wie Stacks arbeiten und habe sie in einigen Tutorials und so verwendet, aber habe mich nie wirklich finden sie in der realen Welt zu verwenden ... die, nachdem ich die Einfachheit, die sie mit der Herausforderung erstellt haben, denke ich habe einige Möglichkeiten verpasst, um Code einfacher/besser zu machen.
Vielleicht ein bisschen zu einfach, aber Sie verwenden einen Stapel immer dann, wenn Sie eine LIFO-Verarbeitungsanforderung haben. – BradleyDotNET
Richtig, im Grunde finden Sie immer, dass Sie hauptsächlich mit einem "Ende" einer Liste arbeiten. Diese Art von Dingen ("Wie kann ich X benutzen") wird einfacher mit Erfahrung. Du wirst es klären, nachdem du mehr Beispiele zum üben hast. – markspace