簡體   English   中英

打印堆棧沒有彈出元素java

[英]printing stack without popping elements java

對於一個任務,我必須編寫一個打印堆棧的方法,這部分很容易

public void print(stack s)
{
   while(!isEmpty())
   {
      System.out.println(s.peek());
      s.pop();
   }

}

問題是,在我打印堆棧之后,我的任務是在堆棧上打印底部元素,這不再是因為我在我的print方法中使用了s.pop()。 這是我打印底部元素的代碼。

public void bottom(stack s)
{
  if(isEmpty())
   {
     System.out.println("Stack is empty");
   }
  else
   {
     System.out.println(stackArray[0]);
   }
}

我的問題是:我應該如何修改print方法,這樣我就不必從堆棧中彈出元素了? 或者是否有另一種方法可以使堆棧在使用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];
    }
    }

}

因為我的代表不夠高,不能回答我自己的問題快速編輯

我想我已經找到了另一種使用它來打印堆棧的方法

public void print(stack s)
{
 for(int i =top-1; i>=0;i--)
   System.out.println(stackArray[i]);
}

它可能不是最好的方法,但它正在起作用:P

如果使用內置的java.util.Stack類型,那么它派生自Vector ,因此您可以使用getElement(int)讀取任何堆棧深度的元素。

如果這是您自己的代碼,則必須添加一個方法來執行相同的操作。

或者,您可以將元素彈出到另一個堆棧或List類型中,然后在打印后重建堆棧,但這樣效率非常低,您的老師很可能對這樣的解決方案感到沮喪。

如果你只想看到內容而沒有任何花哨的東西,有一個簡單的解決方法。

System.out.println(Arrays.toString(myStack.toArray()));
if (!_stack.empty())

檢查堆棧是否為空

for(int i=_stack.size()-1; i>=0;i--)  
System.out.println(_stack.get(i));

獲得堆棧值

使用Iterator遍歷堆棧,因為它們可以處理任何Collection對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM