データ構造(2):スタックの理論と実装

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());
}

おすすめ

転載: www.cnblogs.com/AIThink/p/11332604.html
おすすめ