スタックはより用途が広い
例:サブプロセス呼び出し、再帰呼び出し、式変換、バイナリツリートラバーサル、深さ優先検索など。
実装のアイデア:
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 }