use*_*715 2 java printing stack
对于一项任务,我必须编写一个打印堆栈的方法,这部分很简单
public void print(stack s)
{
while(!isEmpty())
{
System.out.println(s.peek());
s.pop();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,在打印堆栈后,我的任务是打印堆栈上的底部元素,因为我在打印方法中使用了 s.pop() ,所以不再存在该元素。这是我用于打印底部元素的代码。
public void bottom(stack s)
{
if(isEmpty())
{
System.out.println("Stack is empty");
}
else
{
System.out.println(stackArray[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我应该如何修改打印方法,这样我就不必从堆栈中弹出元素?或者是否有另一种方法可以使堆栈在使用 print 方法后仍然保存我的元素?
根据要求,这是我们在课程中使用的堆栈(大部分是荷兰语):
public class MyStack
{
protected Object[ ] stackArray;
protected int top;
private int grootte;
private static final int DEFAULT_GROOTTE = 10;
public MyStack( )
{
grootte = DEFAULT_GROOTTE;
stackArray = new Object[grootte];
top = 0;
}
public boolean isEmpty( )
{
if (top == 0)
return true;
else
return false;
}
public void push(Object e)
{
if (top == grootte)
allocateMore( );
stackArray[top] = e;
top++;
}
public Object pop( )
{
if(isEmpty( ))
{
System.out.println("Stack leeg : er kan geen element van de stack afgehaald worden.");
return null;
}
top--;
return stackArray[top];
}
public Object peek( )
{
if(isEmpty( ))
{
System.out.println("Stack leeg : er kan geen topelement van de stack getoond worden.");
return null;
}
return stackArray[top-1];
}
public int size( )
{
return top;
}
private void allocateMore( )
{
Object[ ] original = stackArray;
grootte = grootte * 2;
stackArray = new Object[ grootte];
for(int i = 0; i < grootte/2; i++)
{
stackArray[i] = original[i];
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于我的代表不够高,无法回答我自己的问题,请快速编辑
我想我已经找到了另一种使用它打印堆栈的方法
public void print(stack s)
{
for(int i =top-1; i>=0;i--)
System.out.println(stackArray[i]);
}
Run Code Online (Sandbox Code Playgroud)
这可能不是最好的方法,但它确实有效:P
如果您使用内置java.util.Stack类型,则它派生自Vector,因此您可以使用getElement(int)它来读取任何堆栈深度的元素。
如果这是您自己的代码,您将必须添加一个方法来执行相同的操作。
或者,您可以将元素弹出到另一个堆栈或类型中List,然后在打印后重建堆栈,但这会非常低效,并且您的老师很可能会对这种解决方案皱眉。