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

ブログ    
ブログ    
ブログ    

推薦する

...

オフライン手法の可能性を最大限に引き出すために、武漢大学とKuaishouは分離型ビデオインスタンスセグメンテーションフレームワークDVISを提案した。

ビデオセグメンテーションタスクは、画像セグメンテーションタスクの拡張版です。ビデオ内のすべてのターゲ...

テンセントクラウドの「AIスーパーベース」特別セッションがWOTカンファレンスで発表され、技術革新がAIインフラの新たな章を導く

過去2年間、「百機種戦争」は中国で人気の技術トピックになりました。 2020年以降、中国は大型モデル...

初心者からプロまでが使用する機械学習ソフトウェア トップ 10

この記事では、機械学習に最適なソフトウェアについて説明します。これらのソフトウェアは、ML コードを...

JD.comの鄭志同氏:機械学習を使って何億もの商品データを最適化する方法

[51CTO.comより引用] 2017年7月21日から22日まで、51CTOが主催する人工知能をテ...

AIが新たな成長エンジンに。アマゾン ウェブ サービスの技術的手法に耳を傾けてみよう

AI は数年前にテクノロジーの世界で人気を博しましたが、今では何千もの業界で革新と徹底的な応用が行わ...

AIを活用して、ナスダックは金融業界向けのSaaSプロバイダーに変革したいと考えている

ナスダックがAIGCに対して強気であることは疑いの余地がない。 Nasdaq の CIO 兼 CTO...

...

AIがすぐに作家に取って代わることはないだろうが、その未来はあなたが思っているよりも近いかもしれない

人工知能は、多くの企業にとってコンテンツマーケティングと管理の効率化に大きな役割を果たしています。 ...

Huaweiは封鎖を突破し、GoogleのDropout特許をベンチマークし、独自のアルゴリズムDisoutをオープンソース化

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

AIは数分間の記録に基づいて、人がCOVID-19に感染したかどうかを判断できますか?

今日の若者は、「エモ」という言葉をキャッチフレーズとして使うことに慣れているが、本当の「うつ病」が何...

自然言語処理のためのオープンソースツール12選

[[316046]]独自の NLP アプリケーションで使用できる 12 個のツールを見てみましょう。...

AIファイナンスブームの背後にはアリババとスタートアップ企業独自の狙いがある

中国の人工知能分野の二大大手であるMegvii TechnologyとSenseTime Techn...

...