1.スタックインタフェースを定義
1 パブリック インターフェイススタック<T> { 2 // リターンスタックサイズ 3。 公共 int型のサイズ(); 4 // スタックが空であるか否かを判断する 5。 パブリック ブールのisEmpty(); 6 // スタック 。7 公共 ボイドプッシュ(T T) ; 8 // スタック 9 パブリックオブジェクトPOP()はスローStackEmptyExceptionを、 10 //は、スタックの先頭を返す 。11 公衆オブジェクトPEEK()スローStackEmptyExceptionを、 12です }
2.カスタム例外
1 パブリック クラス StackEmptyException 延びのRuntimeExceptionを{ 2 // 新しいクラスの例外スタックが空である 3。 公的{StackEmptyException(文字列eMeaasge) 4。 スーパー(eMeaasge); 5 } 。6 }
3.アレイスタックインタフェースを実装
1 パブリック クラス StackArray <T> を実装スタック<T> { 2 // スタック2の初期容量; 3 プライベート 最終 INT LEN = 2 ; 4 // 定義されたポインタのスタック; 5 プライベート INT トップ; 6 // アレイスタック達成 7 プライベートT []の要素; 8 // コンストラクタは初期化 9。 公共StackArray(){ 10 トップ= -1 ; 11 要素=(T [])新しい新しいオブジェクト[LEN]; 12である } 13であります 14 @Override 15 公共 int型のサイズ(){ 16 リターントップ+ 1 。 17 } 18 19 @Override 20 パブリック ブールのisEmpty(){ 21 リターントップ<0 。 22 } 23 24 @Override 25 公共 ボイドプッシュ(T tの){ 26 であれば(この .size()== elements.length){ 27 この.expandSize()。 28 } 29 // ++トップ、最初の増分、及び、割り当てられた 30個 の要素[トップ++] = T; 31である } 32 33である @Override 34は パブリック(オブジェクトPOP)スローStackEmptyException { 35 IF(この.isEmpty()){ 36 投 新しい新しい StackEmptyExceptionを( "現在のスタックが空である、スタックはできません" ); 37 } 38である オブジェクトOBJ = エレメント[トップ]; 39 // top--、最初の割り当て、その後マイナスから 40個 の要素[トップ- ] = NULL ; 41は、 戻りOBJと、 42 } 43である 44である @Override 45 パブリックオブジェクトPEEK()がスローStackEmptyException { 46である IF(この.isEmpty()){ 47 投 新しい新 StackEmptyException( "現在のスタックが空である、なし内容" ); 48 } 49の リターン要素[上]; 50 } 51 // スタック容量の拡張 52は、 公共 ボイドexpandSize(){ 53であり、 T [] = A(T [])新しい新しいオブジェクト[elements.length * 2 ]; 54である ため(INTi = 0; iはelements.length <; iは++ ){ 55 [I] =の要素[i]は、 56 } 57個 の要素= 。 58 } 59 }
4.テスト
1つの パブリック クラスメイン{ 2 3 公共 静的 ボイドメイン(文字列[]引数){ 4 StackArray <整数> stackArray = 新しい StackArray <整数> (); 5 のSystem.out.println(stackArray.size())。 6 / * stackArray.pop()。* / 7 stackArray.push(1 )。 8 stackArray.push(2 )。 9 stackArray.push(5 )。 10 stackArray.push(6 )。 11 のSystem.out.println(stackArray.size())。 12 System.out.println(stackArray.peek())。 13 14 15 } 16 }
5.試験結果