pop()实现 - 基于数组的堆栈

时间:2017-03-06 08:45:22

标签: java arrays stack

目前正在努力完成一项家庭作业,我们需要实现基于数组的堆栈实现。我正在努力使用pop()方法。请参阅下面的我目前的实施:

Serial

我遇到的问题是,在当前的迭代中,pop方法不会从数组中删除项目,也不会降低指定级别的列表容量,即大小小于容量的25%时。

1 个答案:

答案 0 :(得分:0)

快速&脏(和学生“容易”):

public class MyStack
{

    Object[] elements;
    int size;
    int capacity;

    public MyStack()
    {
        this.capacity = 1;
        this.elements = new Object[capacity];
        this.size = 0;

    }

    public boolean isEmpty()
    {
        return (size == 0);
    }

    public void push(Object obj)
    {
        if (size == capacity) {
            capacity = capacity * 2;
            resize();
        }
        elements[size] = obj;
        size++;
    }

    public Object pop() throws Exception
    {
        if (isEmpty()) {
            throw new Exception();
        }

        this.size--;
        Object result = this.elements[size];
        this.elements[size] = null;

        if (size < (capacity / 4)) {
            capacity = capacity / 2;
            resize();
        }
        return result;
    }

    private void resize()
    {
        Object temp[] = elements;
        elements = new Object[capacity];

        for (int i = 0; i < size; i++) {
            elements[i] = temp[i];
        }
    }

    public static void main(String[] args) throws Exception
    {
        MyStack my = new MyStack();
        my.push(1);
        my.push(2);
        my.push(3);
        my.push(4);
        my.push(5);

        Object o5 = my.pop();
        Object o4 = my.pop();
        Object o3 = my.pop();
        Object o2 = my.pop();
        Object o1 = my.pop();
        Object o0 = null;
        try {
            o0 = my.pop();
        } catch (Exception e) {
            System.out.println("Empty stack");
        }
        System.out.println(String.format("%s %s %s %s %s %s", o5, o4, o3, o2, o1, o0));

    }
}