C# データ構造とアルゴリズム スタックの簡単な分析

C# データ構造とアルゴリズム スタックの簡単な分析

コンピュータ サイエンスでは、スタックは、テーブルの末尾での挿入または削除操作に制限された線形テーブルです。後入れ先出しの原則に従ってデータを格納します。最初に入力されたデータはスタックの一番下にプッシュされ、最後のデータはスタックの一番上にあります。データを読み取る必要がある場合は、スタックの上からポップされます(最後のデータが最初に読み出されます)。これは、一方の端でのみ挿入および削除できる特殊な線形リストです。アイテムはバケツに積み重ねられます。最初に積み重ねられるものは一番下で押され、次に1つずつ積み重ねられます。物を取り出すときは、上から1つずつしか取り出せません。積み重ねと取り出しはどちらも上部で行われ、下部は一般に固定されています。

C# のデータ構造とアルゴリズムのスタックは、アイテムを積み重ねるバケツに似たデータ構造です。削除と挿入の端はスタックの上部と呼ばれ、もう一方の端はスタックの下部と呼ばれます。挿入は一般にプッシュ (PUSH) と呼ばれ、削除はポップ (POP) と呼ばれます。 スタックは、Last In First Out テーブル (LIFO テーブル) とも呼ばれます。

C# データ構造とアルゴリズム スタック 1. プッシュ アルゴリズム

◆TOP ≥ n の場合はオーバーフロー情報を与え、エラー処理を行う(スタックにプッシュする前に、まずスタックがいっぱいかどうかをチェックする。いっぱいであればオーバーフロー発生、いっぱいでなければ②を行う);

◆TOP=TOP+1 を設定します(スタックポインタが 1 増加し、スタックアドレスを指します)。

◆S(TOP)=X, 終了(Xはスタック上の新しい要素)

C# データ構造とアルゴリズム スタック 2、Pop (POP) アルゴリズム

◆TOP≤0の場合はアンダーフローメッセージが表示され、エラー処理されます(スタックをポップする前にスタックが空かどうかを確認します。空の場合はアンダーフロー、空でない場合は②として処理されます)。

◆X=S(SOP)、(スタックをポップした後の要素がXに割り当てられます)

◆TOP=TOP-1、終了(スタックポインタが1減少し、スタックの先頭を指します)。

C# データ構造とアルゴリズム スタック実装インターフェイス:

  1. 公共 インターフェースIStack<T>
  2. {
  3.     さ();
  4.     ブール型IsEmpty();
  5.      voidクリア();
  6.      void Push(T アイテム);
  7. Tポップ();
  8. T GetPopValue();
  9. }

次のコードは、C# データ構造とアルゴリズム スタックを実装するクラスです。

  1. 公共 クラスJStack<T> : IStack<T>
  2. {
  3.     プライベート 整数サイズ;
  4.     プライベートT[]アイテム;
  5.     プライベート 整数トップ;
  6.  
  7.     パブリックT this [ intインデックス]
  8. {
  9.          get { return item[index]; }
  10.         設定{ 項目[インデックス] = 値; }
  11. }
  12.  
  13.     公共  intサイズ
  14. {
  15.         取得{サイズを返す; }
  16.         設定{ サイズ = 値; }
  17. }
  18.  
  19.     公共  intトップ
  20. {
  21.         取得{先頭に戻る; }
  22. }
  23.  
  24.  
  25.  
  26.     パブリックJStack( int長さ)
  27. {
  28. 上 = -1;
  29. サイズ = 長さ;
  30. アイテム =新しいT[長さ];
  31. }
  32.  
  33.     公共 整数長さ()
  34. {
  35.         先頭 + 1を返します
  36. }
  37.  
  38.     公共 ブール型IsEmpty()
  39. {
  40.         戻り値(top == -1);
  41. }
  42.  
  43.     公共  voidクリア()
  44. {
  45. 上 = -1;
  46. }
  47.  
  48.     公共  void Push(T アイテム)
  49. {
  50.          (トップ < サイズ - 1)の場合
  51. {
  52. item[++top] = アイテム;
  53. }
  54. }
  55.  
  56.     パブリックT ポップ()
  57. {
  58. T tmp =デフォルト(T);
  59.          if (!IsEmpty())
  60. {
  61. tmp = アイテム[トップ];
  62. }
  63.          tmpを返します
  64. }
  65.  
  66.     パブリックT GetPopValue()
  67. {
  68.         空の場合()
  69. {
  70.             投げる 新しいArgumentNullException( "スタックはすでに空です" "項目 Null" );
  71. }
  72.         アイテム[トップ]を返す;
  73. }
  74. }

以下は、C# データ構造とアルゴリズム スタックのテストです。

  1. 試す 
  2. {
  3. JStack<文字列> js =新しいJStack<文字列>(20);
  4. Console.WriteLine( "------スタックが初期化されました----" );
  5. コンソールに行を書き込む。
  6. Console.WriteLine(js.IsEmpty().ToString());
  7. js.Push( "A" );
  8. js.Push( "B" );
  9. js.Push( "C" );
  10. js.Push( "D" );
  11. Console.WriteLine( "------データがスタックに挿入されました----" );
  12. コンソールに行を書き込む。
  13. Console.WriteLine(js.IsEmpty().ToString());
  14.  
  15. Console.WriteLine( "------スタックの一番上のデータを取得します----" );
  16. Console.WriteLine(js.GetPopValue().ToString());
  17.  
  18. Console.WriteLine( "------スタックをクリア----" );
  19. js.Clear();
  20. Console.WriteLine(js.GetPopValue().ToString());
  21. コンソールの行を読み取ります。
  22. }
  23. catch (例外例)
  24. {
  25. Console.WriteLine(例:Message);
  26. コンソールの行を読み取ります。
  27. }

オブジェクトの順序を逆にする必要がある場合は、オブジェクトをスタックに順番に配置し、スタックから取り出すことで機能が実現されます。

これで、C# のデータ構造とアルゴリズムのスタックの紹介は終わりです。C# のデータ構造とアルゴリズムのスタックの学習に役立つことを願っています。

<<:  C#アルゴリズムに関する面接の質問の簡単な分析

>>:  C# のデータ構造とアルゴリズムにおけるキューの簡単な分析

ブログ    
ブログ    

推薦する

Java から MySQL に接続するためのベストプラクティスを解読: 自分に合った方法を選択する

MySQL への接続は、Java 開発において非常に一般的なタスクの 1 つです。次のセクションでは...

新しい消費者向け IoT と人工知能の開発を加速させる機会は何でしょうか?

近年、世界的な技術開発の加速化が進み、新世代の情報通信技術が次々と導入され、数多くの新たなビジネスモ...

古典へのオマージュ!ボストンダイナミクスのロボットが40年前のローリングストーンズのダンスを正確に再現

ボストン・ダイナミクスが「バンドで演奏」します!今回のターゲットは有名な「ローリング・ストーンズ」。...

新薬研究開発の方向性は?人工知能はどのように発展するのでしょうか?トップ科学者の意見

昨日は第4回世界トップ科学者フォーラムの2日目でした。世界トップの科学者たちがオンラインとオフライン...

IoTと機械学習がビジネスを加速させる5つの方法

モノのインターネットと機械学習は、今日のビジネスにおいて最も破壊的なテクノロジーの 2 つです。さら...

AI キャリアに移行する IT プロフェッショナルのための 8 つのヒント

IT プロフェッショナルは、IT 職から AI 技術職にどのように移行するのでしょうか? 専門家によ...

人工知能はモノのインターネットにおける次のブレークスルーとなるでしょうか?

AIoT は、モノのインターネットとそれに接続されたデバイスのネットワークをクラウドから解放し、イ...

MIT、思考制御によるロボットのミスを防ぐ新しいインターフェースシステムを開発

[[233698]]海外メディアの報道によると、ロボットに災害を引き起こす可能性のあることをしないよ...

2020 年の RPA の 7 つの主要トレンド: AI の有効化からより戦略的な拡張まで

ロボティック プロセス オートメーション (RPA) サービス プロバイダーである Blue Pri...

機械学習において統計がなぜそれほど重要なのか?

統計学と機械学習は密接に関連した2つの分野です。実際のところ、この 2 つの境界線は非常に曖昧になる...

科学者たちは一連のAI映画評価ツールを開発しました。撮影が始まる前に評価を与えることができます。

海外メディアの報道によると、映画の評価は大きな問題である。すべての映画の予告編の最後にそれらを見るこ...

...

子どもたちがロボットに出会うと、彼らの社会的交流はどのように変化するのでしょうか?

[[241846]]タイトル画像はVisual Chinaより過去2年間で、子供向けのロボット教育...