在Java中使用数组实现堆栈

感官沙发

我正在尝试使用数组作为其核心在Java中实现堆栈。这只是学习和理解堆栈如何工作的目的。

我的想法是使用Array(而不是ArrayList)并尝试模仿Stack结构。此实现将具有静态大小。有一个以-1开头的指针指示空堆栈。指针将随着我们添加元素而增加,并且我们不必担心删除该元素,因为一旦需要该空间(索引),我们将覆盖该值。

以下是我的源代码,并附带一些问题:

import java.util.*;

public class stackUsingArray{

   private int[] myStack;
   private int pointer;

   /**
    -Constructor
   */
   public stackUsingArray()
   {
       myStack = new int[10];
       pointer = -1;//keep track of where the top element is on the stack.
   }

   /**
    -Pop method
   */
   public int pop()
  {      
      if(pointer==-1)
      {
          //throw exception here
      }
      return myStack[pointer--];
  }

  /**
  -Push when the stack is not empty.
  */

   public void push(int num)
   {
       if(pointer== myStack.size()-1)
       {
           //throw exception here
       }
       else
       {
            myStack[++pointer] = num;//add to the stack           
        }       
   }

/**
-return the top element of the stack
*/
   public void peek()
   {
       return pointer;
   }

/**
-return false if there is not more element on the stack
*/
   public boolean isEmpty()
   {
       return (pointer == -1)? true : false;
   }

   public static void main(String [] arg)
   {
       stackUsingArray newStack = new stackUsingArray();
       newStack.push(1);
       newStack.push(2);
       newStack.push(3);

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

在我评论为异常的部分:

public int pop()
      {      
          if(pointer==-1)
          {
              //throw exception here
          }
          return myStack[pointer--];
      }

您认为哪种例外最合乎逻辑?大多数时候,我只是在屏幕上打印输出。但是,我很想学习如何引发异常。

这部分:

 public void push(int num)
   {
       if(pointer== myStack.size()-1)
       {
           //throw exception here
       }
       else
       {
            myStack[++pointer] = num;//add to the stack           
        }       
   }

程序本身必须执行myStack.size()-1的操作。我想知道在班级中拥有一个私有成员来保持-1大小是否更好?我的意思是效率。

另外,如果我们要使用ArrayList来实现此Stack。它会更有效地运行吗?我的意思是,ArrayList有很多开销,例如方法的内部调用。

最后,我知道我的代码不是很好,所以请给我一些建议以使其更好!

斯拉夫乔

我会抛出从RuntimeException派生的自定义StackEmptyException / StackFullException,因此未选中它们。如果未选中,则您的用户不必包围try / catch中的每个pop()。如果引发了检查的异常,则它们将不得不尝试/捕获每个弹出窗口,或者声明自己的方法作为引发异常。有关更多信息,请参见此讨论:Java:检查与未检查异常说明

程序本身必须执行myStack.size()-1的操作。我想知道在班级中拥有一个私有成员来保持-1大小是否更好?我的意思是效率。

它根本不会引起注意,不要执行只会节省一个或两个处理器周期的优化,而不会减少算法复杂性或I / O操作数量的优化。

另外,如果我们要使用ArrayList来实现此Stack。它会更有效地运行吗?我的意思是,ArrayList有很多开销,例如方法的内部调用。

如果您开始在内部扩展阵列,它将与您自己的实现相同地运行。

最后,我知道我的代码不是很好,所以请给我一些建议以使其更好!太感谢了!

对于一个学习项目来说,这是非常好的,请继续努力;)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Java中使用数组实现堆栈

来自分类Dev

使用数组实现堆栈

来自分类Dev

如何在Java中使用HashMap实现堆栈?

来自分类Dev

在我的实现中使用堆栈是否正确?

来自分类Dev

使用数组,计数和索引实现堆栈

来自分类Dev

在构造函数中使用数组以实现Java中的功能

来自分类Dev

在Java中使用3个堆栈对未排序的数组进行排序

来自分类Dev

堆栈和队列:使用数组更容易实现?

来自分类Dev

使用灵活的数组成员实现堆栈

来自分类Dev

Java:堆栈实现

来自分类Dev

java是如何实现堆栈的?

来自分类常见问题

无法在C中使用数组构造堆栈

来自分类Dev

无法在C中使用数组构造堆栈

来自分类Dev

如何使用Java 8 Stream实现堆栈迭代

来自分类Dev

如何使用Java 8 Stream实现堆栈迭代

来自分类Dev

为什么要使用链接列表而不是数组或向量实现来实现堆栈或队列?

来自分类Dev

在堆栈中使用HSpec

来自分类Dev

在PositionedTransition中使用堆栈

来自分类Dev

在Python中使用堆栈

来自分类Dev

(在C中)使用数组实现堆栈-将数组大小加倍时出现运行时错误

来自分类Dev

您将使用什么来实现两个堆栈队列?基于数组的堆栈还是链表堆栈?两个队列堆栈呢?

来自分类Dev

使用函数调用实现堆栈

来自分类Dev

使用链表实现堆栈损坏

来自分类Dev

使用 o(1) 实现堆栈

来自分类Dev

在Java中使用ASTParser实现Metric Suite

来自分类Dev

在 Java 中使用 $elemMatch 实现 Mongodb 查询

来自分类Dev

在实现Class中使用额外的方法实现Java接口

来自分类Dev

Java接口:在实现类中使用默认方法实现

来自分类Dev

C中基于数组的堆栈实现