基于动态数组的方法实现栈:Java语言实现

1 前言

       上一篇写了《基于简单数组的方法实现栈:Java语言实现》,但是一旦栈的最大空间给出,满栈后再执行入栈操作将会产生溢出异常,这里采用采用动态数组的方法实现栈,用数组倍增的技术解决满栈的问题,但是需要注意的是,倍增太多可能会导致内存溢出。

2 基于动态数组的方法实现栈

package Stack_Study;

/**
 * Created by Administrator on 2018/5/13.
 */
public class DynArrayStack {
    private int top;//栈顶元素的位置
    private int capacity;//栈的容量
    private int[] array;//实现栈功能的数组

    public DynArrayStack(int capacity) {
        this.capacity = capacity;
        array = new int[capacity];
        top = -1;
    }

    public int getTop() {
        return top;
    }

    public int getCapacity() {
        return capacity;
    }

    //判断栈中是否有元素
    public boolean isEmpty() {
        return top == -1;
    }

    //判断栈中是否存满元素
    public boolean isStackFull() {
        return (top == capacity - 1);
    }

    //入栈:将数据压入栈
    public void push(int data) {
        if(isStackFull()) {
            doubleStack();
        }
        array[++top] = data;// top = top +1; array[top] = data;
    }

    //栈的大小扩容:数组倍增
    public void doubleStack() {
        int newArray[] = new int[2 * capacity];
        System.arraycopy(array,0,newArray,0,capacity);
        capacity = capacity * 2;
        array = newArray;
    }

    //出栈:删除并返回最后一个插入栈的元素
    public int pop() {
        if(isEmpty()) {
            System.out.println("栈为空");
            return 0;
        }else {
            return array[top--];//array[top] = data;top = top -1 ;
        }
    }

    //获取栈顶的元素,但不出栈
    public int top() {
        return array[getTop()];
    }

    //返回栈中元素的个数
    public int size() {
        return (top + 1);
    }

    //删除栈
    public void deteleStack() {
        top = -1;
    }
}

3 测试

package Stack_Study;

/**
 * Created by Administrator on 2018/5/13.
 */
public class DynArrayStackTest {
    public static void main(String[] args) {
        DynArrayStack stack = new DynArrayStack(2);
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        System.out.println(stack.pop());
        System.out.println(stack.size());
    }
}




猜你喜欢

转载自blog.csdn.net/cqulun123/article/details/80299220
今日推荐