java - 在Java中为堆栈结构创建动态数组

标签 java data-structures stack arrays

我正在学习堆栈数据结构。我想创建一个动态数组。当超过大小时,我想创建一个新数组。

程序输出:

java.lang.ArrayIndexOutOfBoundsException: 2
must be :50 40 30

代码如下:

    class Stack{
      int array[];
      int size;
      int top;

      Stack(int size){
        this.size=size;
        array=new int[size];
        top=0;
       }

       public void push(int a){
          if(top>=size){
          int array2[]=new int[size*2];
          for(int i=0;i<size;i++){
            array2[i]=array[i];
          }
          array[top++]=a;
          }
          else{
            array[top++]=a;
          }
        }
        public int pop(){
          return array[--top];
      }
    }

    public class Stack1 {

    public static void main(String[] args) {
       Stack y=new Stack(2);
       y.push(10);
       y.push(20);
       y.push(30);
       y.push(40);
       y.push(50);

       System.out.println(y.pop());
       System.out.println(y.pop());
       System.out.println(y.pop()); 
    }
 }

最佳答案

当原始数组已满时,您将创建一个大小加倍的新数组,但随后您不对新数组执行任何操作。

将代码更改为:

public void push(int a){
  if(top>=size){
    int array2[]=new int[size*2];
    for(int i=0;i<size;i++){
      array2[i]=array[i];
    }
    array = array2; 
    size *=2;
  }
  array[top++]=a;
}

关于java - 在Java中为堆栈结构创建动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40957469/

相关文章:

java - 我想为在 Netbeans 中开发的 Java 项目创 build 置并拥有 Mysql Xampp

java - 在 Java Applet 中绘制字符串 ArrayList

c++ - 编译器不理解递归函数来打印树级顺序 C++

data-structures - 为什么只在平衡的二分查找树的叶节点中存储数据?

function - Postgresql:插入/更新后触发函数:堆栈深度限制错误

java - 我可以使用 TestNG 中的 @Parameters 从用户定义的 xml 中读取而不是从 testng.xml 中读取吗

java - 将 Set<String> 的内容放入单个字符串的最快方法,其中单词用空格分隔?

c++ - 如何在此自定义堆栈实现中正确分配更多内存?

c - C中程序堆栈的确切内容是什么?

Java 堆栈不遵循 LIFO