C#でスタックを反転(逆順)にする方法
スタックはLIFO(Last In First Out:後入れ先出し)という特性を持つデータ構造です。この特性を活かすと、あるスタックから別のスタックへ要素を移し替えるだけで、簡単に要素の順序を反転させることができます。ここでは、C#の Stack クラスを使ってスタックを反転する方法を、具体的な手順とサンプルコード付きで解説します。
反転の手順
1. スタックの作成と要素の追加
まず、元となるスタックを作成し、Push メソッドで要素を追加します。
Stack st = new Stack();
st.Push('P');
st.Push('Q');
st.Push('R');
2. 反転用のスタックを用意する
次に、反転結果を格納するためのもう1つのスタックを作成します。
Stack rev = new Stack();
3. PushとPopで反転処理を行う
元のスタックの要素数が0になるまで、while ループを使って Pop メソッドで取り出した要素を、新しいスタックに Push メソッドで追加していきます。
while (st.Count != 0) {
rev.Push(st.Pop());
}
スタックは後入れ先出しの構造のため、元のスタックから取り出される順序は「R → Q → P」となります。これをそのまま新しいスタックに積み上げると、rev を列挙したときの順序は「P → Q → R」となり、見事に反転される仕組みです。
完全なサンプルコード
以下に、ここまでの手順をまとめた完全なコードを示します。
Example
using System;
using System.Collections;
namespace CollectionsApplication {
public class Program {
public static void Main(string[] args) {
Stack st = new Stack();
Stack rev = new Stack();
st.Push('P');
st.Push('Q');
st.Push('R');
Console.WriteLine("Current stack: ");
foreach(char c in st) {
Console.Write(c + " ");
}
Console.WriteLine();
while (st.Count != 0) {
rev.Push(st.Pop());
}
Console.WriteLine("Reversed stack: ");
foreach(char c in rev) {
Console.Write(c + " ");
}
}
}
}
Output
Current stack: R Q P Reversed stack: P Q R
このように、Count プロパティで残りの要素数を確認しながら Pop と Push を組み合わせるだけで、追加のアルゴリズムを実装することなくスタックを反転できます。コードもシンプルで可読性が高いため、実務でも安心して使える手法です。
-
【C++】キューを使って二分探索木(BST)のパスを反転する方法
問題の概要 二分探索木(BST)が与えられ、特定のキーからルートに至るパス上のノードの値を反転することが求められます。 たとえば次のようなイメージです。 解決のためのアプローチ このアプローチでは、まず空のキューを用意してルートから探索を開始します。木を辿りながら経路上のノードの値を順番にキューへプッシュしていき、目的のキーを持つノードが見つかったら、再帰の帰り道でキューの先頭から順に値を書き戻します。こうすることで、パス上のノードの値がきれいに反転されます。 C++での実装例 #include <bits/stdc++.h> using namespace std; stru
-
Pythonで再帰を使って文字列を反転させるプログラムの書き方
再帰(リカージョン)の手法を使って文字列を逆順に並べ替えたい場合は、ユーザー定義の関数を再帰と組み合わせて実装します。再帰とは、大きな問題をより小さな単位に分割してそれぞれの結果を計算し、それらを組み合わせることで最終的な答えを導き出す手法です。文字列の反転においても、この考え方をそのまま応用できます。コード例以下に実際のプログラム例を示します。def reverse_string(my_string): if len(my_string) == 0: r