Java Stack数组实现弹出不起作用

时间:2013-07-16 03:21:40

标签: java recursion arraylist stack

public class ArrayStackImpl<AnyType> implements Stack<AnyType>
{
    // large array limit  to store the stack
    public final int LIMIT = 10000000;

    // the actual storage with a pointer to the top of the stack
    private AnyType[] vals = (AnyType[]) new Object[LIMIT];
    private int topPointer = -1;

    // return the top of the stack by pointing to top point
    public AnyType top()
    {
        return vals[topPointer];
    }

    // return the top and reduce the top pointer
    public AnyType pop()
    {
        AnyType tmp = top();
        topPointer--;
        return tmp;
    }

    // increase the top pointer and add the data
    public void push(AnyType data)
    {
        topPointer++;
        vals[topPointer] = data;
    }

    // returns true if the stack is empty
    public boolean empty()
    {
        return topPointer == -1;
    }
}

public void stackArrange(ArrayList list1, ArrayList list2)
{
    ArrayStackImpl<Integer> s = new ArrayStackImpl<Integer>();

    if (list1.isEmpty()) {
        throw new IllegalArgumentException("Array is Empty");
    }
    if (s.empty()) {
        s.push((Integer) list1.get(list1.size() - 1));
    }
    for (int i = list1.size() - 2; i >= 0; i--) {
        int e = (Integer) list1.get(i);
        if (e >= s.top()) {
            while (!s.empty()) {
                list2.add(s.pop());
            }
            s.push(e);
        }
        else {
            s.push(e);
        }
    }
}

我在弹出元素时遇到了问题。如果元素大于那时我需要比较堆栈中的元素,弹出堆栈中的元素并推入当前元素。所以,例如,留在这个arraylist的后面 1,4,3,2,7,3,6,4 如果堆栈为空,则将4推入堆栈 6大于4,因此弹出4并将6推入堆叠。 3小于推入3进入堆栈。 7大于3所以pop 3和pop 6使用while循环。

这是我调试时出现的问题。即使顶部指针为-1,7也会覆盖堆栈中的6。

我在while循环中的错误是什么?

0 个答案:

没有答案