Java用配列で実現されるスタック

1288 ワード

最近はアルゴリズムを見ていますが、スタックを見て、ある面接の時に筆記試験問題にあったと思います。直接コード:
public class ArrayStack {

  private String [] items; //  
  private int count;  //      
  private int n;      //    

  //     
   public ArrayStack(int n) {
      this.items = new String[n];
      this.n = n;
      this.count = 0;
  }
  //    
  public boolean Push (String item) {
      if (count == n) {  //   n    ,    
          return false;
      }
      items[count] = item;// item     count   
      count++;            //  count  
      return true;
  }
  //    
  public String Pop () {
      if (count == 0) {  //    ,      
          return null;
      }
      String temp = items[count-1]; //        count—1  
      count--;                      //  count  
      return temp;
  }
}
メモリ中のスタックとデータ構造スタックは概念ではなく、メモリ中のスタックは実際に存在する物理領域であり、データ構造中のスタックは抽象的なデータ記憶構造であると言えます。
メモリ空間は論理的に三つの部分に分けられています。コードエリア、静的データエリアと動的データエリア、動的データエリアはまたスタックエリアとヒープゾーンに分けられます。
コードエリア:メソッド体のバイナリコードを記憶します。アドバンストスケジュール(ジョブスケジュール)、ミドルスケジュール(メモリスケジュール)、低レベルスケジュール(プロセススケジュール)制御コードエリアの実行コードの切り替え。
静的データエリア:グローバル変数、静的変数、定数を格納し、定数はfinal修飾の定数とString定数を含む。システムは自動的に割り当てられ、回収されます。
スタック:運転方法のイメージ、局所変数、戻り値を格納します。システムによって自動的に割り当てられ、回収されます。
ヒープ領域:newオブジェクトの参照またはアドレスは、スタック領域に格納され、そのオブジェクトがヒープ領域に格納されている実際のデータを指す。