C#
 Computer >> コンピューター >  >> プログラミング >> C#

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 プロパティで残りの要素数を確認しながら PopPush を組み合わせるだけで、追加のアルゴリズムを実装することなくスタックを反転できます。コードもシンプルで可読性が高いため、実務でも安心して使える手法です。

  1. 【C++】キューを使って二分探索木(BST)のパスを反転する方法

    問題の概要 二分探索木(BST)が与えられ、特定のキーからルートに至るパス上のノードの値を反転することが求められます。 たとえば次のようなイメージです。 解決のためのアプローチ このアプローチでは、まず空のキューを用意してルートから探索を開始します。木を辿りながら経路上のノードの値を順番にキューへプッシュしていき、目的のキーを持つノードが見つかったら、再帰の帰り道でキューの先頭から順に値を書き戻します。こうすることで、パス上のノードの値がきれいに反転されます。 C++での実装例 #include <bits/stdc++.h> using namespace std; stru

  2. Pythonで再帰を使って文字列を反転させるプログラムの書き方

    再帰(リカージョン)の手法を使って文字列を逆順に並べ替えたい場合は、ユーザー定義の関数を再帰と組み合わせて実装します。再帰とは、大きな問題をより小さな単位に分割してそれぞれの結果を計算し、それらを組み合わせることで最終的な答えを導き出す手法です。文字列の反転においても、この考え方をそのまま応用できます。コード例以下に実際のプログラム例を示します。def reverse_string(my_string):    if len(my_string) == 0:        r