C#中級

中級 C#で学ぶデータ構造|練習問題編

導入

データ構造は、プログラムの効率性や可読性に直結する重要な要素です。特に中級レベルのプログラマーにとって、適切なデータ構造を選択することは、実務におけるパフォーマンスを大きく向上させる鍵となります。今回は、C#を用いて特定のデータ構造の実装とその活用方法を探り、実際の業務で遭遇しやすいシチュエーションに基づいた練習問題を通じて理解を深めます。

教科書レベルの解説(データ構造)

重要な概念の整理

データ構造には様々な種類がありますが、特にリストや辞書、スタック、キューなどは日常的に利用されます。これらの構造は、データの格納方法やアクセス方法に違いがあり、特定のシナリオにおいて適切な選択が求められます。例えば、スタックはLIFO(Last In, First Out)方式でデータを管理し、キューはFIFO(First In, First Out)方式でデータを処理します。このような特性を理解することで、実際の問題に対して最適なアプローチが可能となります。

コード例(C#)


using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Stack stack = new Stack();
        stack.Push(1);
        stack.Push(2);
        stack.Push(3);
        
        Console.WriteLine("Stack contents:");
        while (stack.Count > 0)
        {
            Console.WriteLine(stack.Pop());
        }
    }
}

コードの行ごとの解説

  1. Stack stack = new Stack(); – 整数型のスタックを作成します。
  2. stack.Push(1); – スタックに1を追加します。
  3. stack.Push(2); – スタックに2を追加します。
  4. stack.Push(3); – スタックに3を追加します。
  5. while (stack.Count > 0) – スタックに要素が残っている間、ループを続けます。
  6. Console.WriteLine(stack.Pop()); – スタックの最上部の要素を取り出し、表示します。

練習問題編

以下に練習問題を用意しました。各問題に対する模範解答と解説も併せて記載しています。

  1. 問題1: スタックを使用して、文字列の逆順を出力するプログラムを作成してください。

    模範解答:

    
    using System;
    using System.Collections.Generic;
    
    class Program
    {
        static void Main()
        {
            string input = "Hello";
            Stack stack = new Stack();
    
            foreach (char c in input)
            {
                stack.Push(c);
            }
    
            Console.Write("Reversed: ");
            while (stack.Count > 0)
            {
                Console.Write(stack.Pop());
            }
        }
    }
    

    解説: 文字列を一文字ずつスタックに追加し、スタックから取り出すことで逆順に出力します。

  2. 問題2: キューを用いて、整数の順序を保持したまま、最初の要素を取り出すプログラムを作成してください。

    模範解答:

    
    using System;
    using System.Collections.Generic;
    
    class Program
    {
        static void Main()
        {
            Queue queue = new Queue();
            queue.Enqueue(1);
            queue.Enqueue(2);
            queue.Enqueue(3);
    
            Console.WriteLine("First element: " + queue.Dequeue());
        }
    }
    

    解説: Enqueueメソッドで要素を追加し、Dequeueメソッドで最初の要素を取り出します。

  3. 問題3: リストを使用して、整数の合計を計算するプログラムを作成してください。

    模範解答:

    
    using System;
    using System.Collections.Generic;
    
    class Program
    {
        static void Main()
        {
            List numbers = new List { 1, 2, 3, 4, 5 };
            int sum = 0;
    
            foreach (int number in numbers)
            {
                sum += number;
            }
    
            Console.WriteLine("Total Sum: " + sum);
        }
    }
    

    解説: Listを使用して整数を格納し、foreachループで合計を計算します。

まとめ

  • データ構造の選択は、プログラムの効率に大きく影響します。
  • スタックやキューなど、基本的なデータ構造を活用することで、特定の問題に対するアプローチが明確になります。