I.はじめに
データスタックは、第一の後、ファーストアウトデータ構造の後です。
図に示すように、場合データをフェッチするスタックからスタックにデジタル10,15,6,9が順次9,6,15,10であろう後。私たちの生活の中でのボックスのスタックのような構造は、最初の項目は、ボックスの下部に配置され、そして最後に一番上のデータにするだけでなく、上からアイテムを取る時間をピックアップする必要があります。
第二に、コードの実装
1.カスタムスタックとしてMyStackクラスを作成します。
public class MyStack {
}
図2に示すように、必要なプロパティを宣言すること
基礎となるデータ・ストレージ・アレイを使用して、あるいはJavaの一般的なタイプのオブジェクトを使用することができます。
private Object[] arr;//存储数据
private int top;//栈顶的位置
スタックの最上部:配列内の要素のスタック(最後のスタック)の全体の上部は、最後の要素の預金です。
スタックの底:最初の配列要素に格納されているスタック全体(第一のスタック)、中底要素。
3、スタックのコンストラクタ
public MyStack(){
arr = new Object[10];
top = -1;
}
/**
* 参数为数组的初始长度
* @param maxSize
*/
public MyStack(int maxSize){
arr = new Object[maxSize];
top = -1;
}
図4に示すように、圧入スタックにデータを
動作は以降、アレイの基礎となるデータに格納されるtop
変数音符スタックの最上部の位置、したがってtop
スタックの最新トップが設定された後の値を1だけ増加されます。
public void push(Object value) {
arr[++top] = value;
}
5、ポップアップデータのスタックの先頭
データスタックを取得し、このスタックデータが削除されます。スタックは、スタックの最上位の可変位置に記録データに押し込まれるtop
。同様に、スタックを除去するために必要なデータがプラス1 top
デクリメントされます。
public Object pop(){
return arr[top--];
}
6、スタックデータの先頭を見ます
public Object peek(){
return arr[top];
}
図7に示すように、それは空気か否かを判断します
public boolean isEmpty(){
return top == -1;
}
8、フルがあるか否かを判断します
top
配列の最後の要素に等しい場所がいっぱいです
public boolean isFull(){
return top == arr.length-1;
}
9、完全なコード
public class MyStack {
private Object[] arr;//存储数据
private int top;//栈顶的位置
public MyStack() {
arr = new Object[10];
top = -1;
}
/**
* 参数为数组的初始长度
*
* @param maxSize
*/
public MyStack(int maxSize) {
arr = new Object[maxSize];
top = -1;
}
public void push(Object value) {
arr[++top] = value;
}
/**
* 弹出栈顶的数据
* @return
*/
public Object pop(){
return arr[top--];
}
public Object peek(){
return arr[top];
}
public boolean isEmpty(){
return top == -1;
}
public boolean isFull(){
return top == arr.length-1;
}
}
第三に、確認してください
public static void main(String[] args) {
MyStack stack = new MyStack(4);
stack.push("a");
stack.push("b");
stack.push("c");
stack.push("d");
System.out.println("是否为空:" + stack.isEmpty());
System.out.println("是否存满:" + stack.isFull());
System.out.println("栈顶:"+stack.peek());
System.out.println("栈顶:"+stack.peek());
//弹出栈中所有数据
while (!stack.isEmpty()){
System.out.println(stack.pop());
}
System.out.println("是否为空:" + stack.isEmpty());
System.out.println("是否存满:" + stack.isFull());
}