スタックは Java 言語で最も重要なデータ構造の 1 つであり、その実装には少なくとも次のメソッドが含まれている必要があります。
1.pop() ポップ操作。スタックの最上位要素をポップします。
2.push(E e) プッシュ操作
3.peek() スタックの最上位要素を表示します
4.isEmpty() スタックは空ですか?
さらに、スタックを実装するときは、いくつかの問題を考慮する必要があります。
1. スタックの初期サイズと、スタックがいっぱいになった後に新しいスタック領域を追加する方法
2. スタックを更新する場合は同期が必要です
配列を使用してスタックを実装する簡単な例のコードは次のとおりです。
次のようにコードをコピーします。
パブリック クラス Stack<E> {
// Java は汎用配列をサポートしていません。それらを使用する必要がある場合は、Java が提供するコンテナーを使用してください。
プライベート Object[] スタック;
//スタックのデフォルトの初期サイズ
プライベート静的最終整数 INIT_SIZE = 2;
//スタックトップインデックス
プライベート int インデックス。
publicStack() {
スタック = 新しいオブジェクト[INIT_SIZE];
インデックス = -1;
}
/**
※施工方法
*
* @param initSize
* スタックの初期サイズ
*/
public Stack(int initSize) {
if (initSize < 0) {
新しい IllegalArgumentException() をスローします。
}
スタック = 新しいオブジェクト[初期サイズ];
インデックス = -1;
}
/**
※ポップ操作
*
* @return スタックトップオブジェクト
*/
public synchronized E Pop() {
if (!isEmpty()) {
E temp = ピーク();
スタック[インデックス--] = null;
戻り温度;
}
null を返します。
}
/**
※プッシュ操作
*
* @paramオブジェクト
* スタックにプッシュされるのを待っているオブジェクト
*/
public synchronized void Push(E obj) {
if (isFull()) {
オブジェクト[] temp = スタック;
// スタックがいっぱいの場合は、現在のスタック領域の 2 倍のスタックを作成します
stack = 新しいオブジェクト[2 * stack.length];
System.arraycopy(temp, 0, stack, 0, temp.length);
}
スタック[++インデックス] = obj;
}
/**
* スタック上の最上位のオブジェクトを表示する
*
* @return スタックトップオブジェクト
*/
public E Peak() {
if (!isEmpty()) {
return (E) スタック[インデックス];
}
null を返します。
}
/**
* スタックが空かどうかを確認します
*
* @return スタックが空の場合は true を返し、それ以外の場合は false を返します
*/
パブリックブール値 isEmpty() {
インデックス == -1 を返します。
}
/**
* スタックがいっぱいかどうかを確認する
*
* @return スタックがいっぱいの場合は true を返し、それ以外の場合は false を返します
*/
パブリックブール値 isFull() {
インデックス >= stack.length - 1 を返します。
}
}
最後に、スタックのデータ構造 (java.util.Stack) は Java で実装されます。通常は、Vector クラスを継承することで実装されます。