使用数组简单实现栈

import java.util.Arrays;

public class MyArrayStack<T> {

    private T[] arrayStack = (T[]) new Object[1];
    private int stackSize = 0; // 当前栈中已存的数据量

    /**
     * 构造函数,参数值为初始化数组的长度
     * @param length
     */
    public MyArrayStack(int length) {
        arrayStack = (T[]) new Object[length];
    }

    /**
     * 入栈一个元素
     * 如果stackSize大于length的0.75,则扩大二倍,
     * @param t
     */
    public void push(T t){
        if(stackSize > arrayStack.length * 0.75 - 1) {
            T[] newArrayStack = (T[]) new Object[arrayStack.length * 2];
            System.arraycopy(arrayStack, 0, newArrayStack, 0, arrayStack.length - 1);
            arrayStack = newArrayStack;
        }
        arrayStack[stackSize++] = t;
    }

    /**
     * 出栈一个元素
     */
    public T pop(){
        T t = arrayStack[--stackSize];
        arrayStack[stackSize] = null;
        return t;

    }

    /**
     * 获取当前栈中已有的数据量
     * @return
     */
    public int size(){
        return stackSize;
    }

    /**
     * 当前栈是否为空
     * @return
     */
    public boolean isEmpty(){
        return 0 == stackSize;
    }

    public void printStack(){
        System.out.println(Arrays.toString(arrayStack));
    }
}

class MyArrayStackTest{
    public static void main(String[] args) {
        MyArrayStack<String> myArrayStack = new MyArrayStack(10);
        System.out.println(myArrayStack.isEmpty());
        // 测入栈
        myArrayStack.push("1");
        myArrayStack.push("2");
        myArrayStack.push("3");
        myArrayStack.push("4");
        myArrayStack.push("5");
        myArrayStack.push("6");
        myArrayStack.push("7");
        myArrayStack.printStack();
        // 测扩容
        myArrayStack.push("8");
        myArrayStack.printStack();
        // 测出栈
        myArrayStack.pop();
        myArrayStack.printStack();
        // 测是否为空
        System.out.println(myArrayStack.isEmpty());
        // 测大小
        System.out.println(myArrayStack.size());
    }
}

结果:

true
[1, 2, 3, 4, 5, 6, 7, null, null, null]
[1, 2, 3, 4, 5, 6, 7, 8, null, null, null, null, null, null, null, null, null, null, null, null]
[1, 2, 3, 4, 5, 6, 7, null, null, null, null, null, null, null, null, null, null, null, null, null]
false
7

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值