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# のデータ構造とアルゴリズムにおけるキューの簡単な分析

ブログ    

推薦する

2024年の8つの主要テクノロジートレンド

1. AIと機械学習を採用する人が増える人工知能 (AI) と機械学習 (ML) は単なる流行語では...

家庭では人工知能がどのように活用されているのでしょうか?

人工知能(AI)は現在、私たちの家族構造にますます統合されています。さらに、快適性、利便性、安全性、...

2020 年に注目すべき 4 つのエンタープライズ AR トレンド

AR テクノロジーは消費者向け分野ではそれほど優れた成果を上げていませんが、ビジネス界では好まれてい...

...

Googleの上級研究員ネイチャーが記事を公開: 機械学習の3つの大きな「落とし穴」を避ける

アルゴリズム分析は科学研究の重要な方法となっている。生物学者、高エネルギー物理学者、病理学者など、多...

...

今週の Github の人気プロジェクトの概要: 自然言語処理 Python ライブラリ spaCy が最もホットです!

先週、Github で最も人気のあるプロジェクトは、最近バージョン 2.0 に更新された自然言語処理...

人工知能は歯科医療の分野におけるブルーオーシャンである

過去 20 年間で、世界はテクノロジーにおいて驚異的な進歩を遂げ、人間の生活のさまざまな側面に影響を...

人工知能の潜在能力を活かすための深層開発

[[244225]]人工知能は現実的な科学技術の力であり、需要、デジタル経済、高品質の開発に焦点を当...

人工知能とは何かについて10分ほどお話ししましょう。

1999年、ハリウッドSF映画史上最も重要なSF映画『マトリックス』が公開されました。この映画は、...

ML と AI の違い: 詳細ガイド

人工知能 (AI) と機械学習 (ML) は互換性があると考えられる場合もありますが、概念的には関連...

知湖橋プラットフォームにおける大型モデルの応用と実践

1. 事業の状況及び背景まずはブリッジプラットフォームを紹介します。 Bridge は、Zhihu ...

...

Alipay のディープラーニング エンジン xNN を公開

この記事では、Alipay アプリのディープラーニング エンジンである xNN を紹介します。 xN...

分散キャッシュの実装: Java と MongoDB のキャッシュ一貫性戦略

インターネット アプリケーションの急速な発展に伴い、分散システムにおけるキャッシュが重要な役割を果た...