首先,如果这是一个非常明显的问题,或者我没有正确地看待它,我道歉。 我被指示“将堆栈扩展为动态”。我已经获得了如何执行此操作的具体说明,即:
创建一个大小为当前数组大小两倍的新数组tmp
将当前数组的所有元素(在讲义中称为S)复制到tmp
设置S = tmp;
应该将这样做的代码块放入push()方法中,替换异常throw部分。
问题是,我不知道我应该使用什么样的数组(仿制药最近刚刚介绍给我,我不太了解它们,就像我认为的那样)。 是否有一些明显的我遗失或者我不理解这一点?
我没有编写大部分代码,只有pop(),push()和top()方法。
public class ArrayStack<E> implements Stack<E> {
private E[] S;
private int top;
private int capacity;
private static int DEFAULT_SIZE = 100;
public ArrayStack(int size){
capacity = size;
S = (E[]) new Object[size];
top = -1;
}
public ArrayStack(){
this(DEFAULT_SIZE);
}
public E pop() throws StackException{
if(isEmpty())
throw new StackException("stack is empty");
return S[top--];
}
public void push(E e) throws StackException{
if (size() == capacity)
throw new StackException("Stack is full");
S[++top] = e;
}
public E top() throws StackException{
if(isEmpty())
throw new StackException("Stack is empty");
return S[top];
}
答案 0 :(得分:1)
查看代码,数组似乎应该是E
个对象。
使用Java Generics,您可以使用(E[]) new Object[2 * initial_size]
说明书希望您在推送
中查看下面的代码段if (size() == capacity)
throw new StackException("Stack is full");
并且没有给予太多,因为这是一项要做的任务
if (size() == capacity)
Make a new array tmp of twice the size of the current array
Copy all elements the current array (called S in the lecture notes) into tmp
S = tmp;