我不确定如何使这个堆栈实现动态

时间:2014-02-03 04:30:30

标签: java arrays generics stack

首先,如果这是一个非常明显的问题,或者我没有正确地看待它,我道歉。 我被指示“将堆栈扩展为动态”。我已经获得了如何执行此操作的具体说明,即:

  • 创建一个大小为当前数组大小两倍的新数组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];



}

1 个答案:

答案 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;