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循环中的错误是什么?