9、配列は一般的なスタックを実装します

スタックはより用途が広い 

例:サブプロセス呼び出し、再帰呼び出し、式変換、バイナリツリートラバーサル、深さ優先検索など。

実装のアイデア:

1)top = -1の場合、スタックは空で、top = maxsize-1の場合、スタックはいっぱいです。

C#コードの実装:

1  using System;
 2  
3  名前空間データ構造
 4  {
 5      public  class ArrayStack <T>
 6      {
 7          // スタックの最大
8          private  int MaxSize { get ; set ;}
 9          private T [] Item { get ; set ;}
 10          / / スタックの最上部を指し、スタックが空の場合は-1に初期化されます
11          private  int Top { get ; set ;} = -1 ;
 12          // スタックが空かどうか
13          public  bool IsEmpt { get => Top ==- 1 ; }
 14          // 栈是否满了
15          public  bool IsFull { get => Top == MaxSize- 1 ; }
 16          public ArrayStack(int maxSize)
 17          {
 18              this .MaxSize = maxSize;
19              this .Item = new T [maxSize];
20          }
 21          
22          // 入栈
23          public  void Push(T item)
 24         {
 25              if (IsFull)
 26              {
 27                  Console.WriteLine("The stack is full " ;
 28                  return ;
 29              }
 30              Top ++ ;
 31              Item [Top] = item;
 32          }
 33  
34          // Out of the stack 
35          public T Pop( )
 36          {
 37              if (IsEmpt)
 38              {
 39                  Console.WriteLine(" スタックは空です" );
 40                  return  default ;
 41              }
 42              var item = Item [Top];
 43              Top-- ;
 44              return item;
 45          }
 46  
47          // スタックの最上部を
ピーク48          public T Peek()
 49          {
 50              if (IsEmpt)
 51              {
 52                  Console.WriteLine(" スタックは空です" );
 53は                 デフォルトを返す ;
 54             }
 55              return Item [Top];
 56          }
 57      }
 58      public  class ArrayStackDemo
 59      {
 60          public  static  void Main(string [] args)
 61          {
 62              var stack = new ArrayStack < string >(10 );
 63              Console.WriteLine(" 张第三に、ジョン・ドウ、王ウーは積み重ねが" );
 64-              stack.Push(" ジョー・スミス);
 65             stack.Push(" ジョン・ドウ" );
 66              stack.Push(" 王呉" );
 67  
68              Console.WriteLineを(" 王ウー、ジョン・ドウ、スタックのうちジョー・スミス" );
 69              Console.WriteLineを($ " ルックスタックの一番上にいるのは誰ですか?{Stack.Peek()} " );
 70              stack.Pop();
 71              Console.WriteLine($ " スタックの一番上にいるのは誰ですか?{Stack.Peek()} " );
 72              stack.Pop( );
 73              Console.WriteLine($ " スタックの一番上にいるのは誰ですか?{Stack.Peek()} ");
74              stack.Pop();
75              stack.Pop();
76          }
 77      }
 78 }

 

おすすめ

転載: www.cnblogs.com/xiaojvhuang/p/12709983.html