所以我想在数组的顶部添加一个元素,它适用于我插入的第一个值但如果我插入另一个它不会保存到数组中。任何帮助将非常感谢,提前感谢。 这是我的推送功能
private static final int STACK_SIZE = 10;
private double [] stack;
protected int top;
public ArrayStack() {
stack = new double[STACK_SIZE];
top = -1;// stack is empty
}
@Override
public void push (double p) throws DataStructureException {
if (!isFull()) {
top++;
stack[top] = p;
}
else
System.err.println( "Stack is full: cannot push " + p );
}
答案 0 :(得分:0)
那是因为在你的情况下
if (!isFull())
{
top++;
stack[top] = p;
}
你递增你要添加下一个元素的索引,而不是元素的实际位置。由于第二次调用时top
值为1,因此该元素将添加到stack[1]
。
我建议你看看其他一些数据结构。例如,列表有一个方法可以将一个元素添加到列表的开头,以解决您的问题:
list.add(0,p)
另一种选择是使用Deque
,它也有一个在开头插入的方法
https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html
答案 1 :(得分:0)
您在添加前增加了最高计数,因此使用后增量作为索引
if (!isFull()) {
if(top==-1){top++};
stack[top++] = p;
}