如何做Java“玻璃堆栈”或“可遍历堆栈”?

时间:2014-02-07 00:35:51

标签: java arrays stack tostring

我应该在以下代码中实现一个方法inspector(),它将是一个玻璃/可遍历堆栈。我的书籍描述非常模糊,我没有找到任何有关该主题的有用信息。

这是书籍定义:

  

在编译器构造中,我们需要一个观察者方法来检查堆栈   基于它们在堆栈中的位置的元素(堆栈的顶部是   考虑到位置1,从顶部开始的第二个元素是位置2,   等等)。这有时被称为(俗称)“玻璃堆栈”或   (更正式地说)一个“可穿越的堆栈”。堆栈的定义是   正如我们在本章中指定的那样,除了我们添加一个公共方法   命名检查器,接受指示位置的int参数   被退回。如果参数,该方法应返回null   表示未使用的位置。

此外,底部的toString()方法应该将有关堆栈的有用信息报告为字符串,我相信我所拥有的是正确的,但不是100%肯定。

package ch03.stacks;

public class ArrayStack<T> implements BoundedStackInterface<T> 
{
  protected final int DEFCAP = 100; // default capacity
  protected T[] stack;              // holds stack elements
  protected int topIndex = -1;      // index of top element in stack

  public ArrayStack() 
  {
    stack = (T[]) new Object[DEFCAP];
  }

  public ArrayStack(int maxSize) 
  {
    stack = (T[]) new Object[maxSize];
  }

  public void push(T element)
  // Throws StackOverflowException if this stack is full,
  // otherwise places element at the top of this stack.
  {      
    if (!isFull())
    {
      topIndex++;
      stack[topIndex] = element;
    }
    else
      throw new StackOverflowException("Push attempted on a full stack.");
  }

  public void pop()
  // Throws StackUnderflowException if this stack is empty,
  // otherwise removes top element from this stack.
  {                  
    if (!isEmpty())
    {
      stack[topIndex] = null;
      topIndex--;
    }
    else
      throw new StackUnderflowException("Pop attempted on an empty stack.");
  }

  public T top()
  // Throws StackUnderflowException if this stack is empty,
  // otherwise returns top element from this stack.
  {                 
    T topOfStack = null;
    if (!isEmpty())
      topOfStack = stack[topIndex];
    else
      throw new StackUnderflowException("Top attempted on an empty stack.");
    return topOfStack;
  }

  public boolean isEmpty()
  // Returns true if this stack is empty, otherwise returns false.
  {              
    if (topIndex == -1) 
      return true;
    else
      return false;
  }

  public boolean isFull()
  // Returns true if this stack is full, otherwise returns false.
  {              
    if (topIndex == (stack.length - 1)) 
      return true;
    else
      return false;
  }

  public static void popSome(int count)
  {
      for(count > 0; count--)
            {
                if (count <= stack.size())
                {
                    stack.pop();
                }
                else
                {
                    throw new StackUnderflowException("Not enough objects to pop");
                }
            }
  }

  public String toString()
  {
      return stack;
  }
}

0 个答案:

没有答案