Java用配列で実現されるスタック
1288 ワード
最近はアルゴリズムを見ていますが、スタックを見て、ある面接の時に筆記試験問題にあったと思います。直接コード:
メモリ空間は論理的に三つの部分に分けられています。コードエリア、静的データエリアと動的データエリア、動的データエリアはまたスタックエリアとヒープゾーンに分けられます。
コードエリア:メソッド体のバイナリコードを記憶します。アドバンストスケジュール(ジョブスケジュール)、ミドルスケジュール(メモリスケジュール)、低レベルスケジュール(プロセススケジュール)制御コードエリアの実行コードの切り替え。
静的データエリア:グローバル変数、静的変数、定数を格納し、定数はfinal修飾の定数とString定数を含む。システムは自動的に割り当てられ、回収されます。
スタック:運転方法のイメージ、局所変数、戻り値を格納します。システムによって自動的に割り当てられ、回収されます。
ヒープ領域:newオブジェクトの参照またはアドレスは、スタック領域に格納され、そのオブジェクトがヒープ領域に格納されている実際のデータを指す。
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オブジェクトの参照またはアドレスは、スタック領域に格納され、そのオブジェクトがヒープ領域に格納されている実際のデータを指す。