gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:05:15 25 4
gpt4 key购买 nike

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

  • 创建一个新数组 tmp,其大小是当前数组的两倍

  • 将当前数组(在讲义中称为 S)的所有元素复制到 tmp

  • 设置 S = tmp;

执行此操作的代码块将被放置到 Push() 方法中,替换异常抛出部分。

问题是,我不知道我应该使用什么样的数组(泛型最近才向我介绍,我对它们的理解并不像我认为的那样)。我是否遗漏了一些明显的东西,或者我只是没有正确理解这一点?

我没有编写大部分代码,只编写了 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];



}

最佳答案

查看您的代码,该数组似乎应该是 E 对象。

使用 Java 泛型,您可以使用 (E[]) new Object[2 * initial_size] 创建此数组

说明希望您在push中查看下面的代码段

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;

关于java - 我不确定如何使这个堆栈实现动态化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21519706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com