我应该在以下代码中实现一个方法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;
}
}