0

我创建了这个非常简单的堆栈概念的实现。你能告诉我它是否正确和干净吗?您是否看到任何不良的编码习惯?

public class MyStack
{
    private static final int MAXELEMENTS = 10;
    private int[] elements;
    private int numElements;

    public MyStack()
    {
        numElements = 0;
        elements = new int[MAXELEMENTS];
    }

    public boolean isEmpty()
    {
        return (numElements == 0);
    }

    public boolean isFull()
    {
        return (numElements == MAXELEMENTS);
    }

    public void push(int e)
    {
        if (!isFull())
            elements[numElements++] = e;
    }

    public int top()
    {
        if (!isEmpty())
            return elements[numElements - 1];
        else
            return -1;
    }

    public void pop()
    {
        if (!isEmpty())
            numElements--;
    }
}

您可以将其与以下代码一起使用:

class MyStackTestDrive
{
    public static void main(String[] args)
    {
        MyStack s1 = new MyStack();
        MyStack s2 = new MyStack();
        s1.push(2);
        s2.push(4);
        System.out.println(s1.top());
        System.out.println(s2.top());
    }
}
4

3 回答 3

2

我的评论是:

  1. 这将只是一个堆栈int。你应该让它通用
  2. 这是一个只有 10 个元素的堆栈。没有多大用处
  3. numElements栈顶变量的名字不好
  4. top空堆栈的应该throw和异常(传统上)
  5. pop应该返回栈顶。现在是void
于 2012-09-01T15:42:44.460 回答
2

我会做一些事情,其中​​一些只是偏好问题:

  • 将“numElements”重命名为“head”以更好地体现其功能。
  • 添加一个构造函数,可以指定堆栈的最大大小。
  • pop 方法应该返回堆栈的顶部元素并将其删除。那是标准语义。
  • top 和 pop 在空堆栈上调用时应该抛出异常。这是为了防止在没有先检查空堆栈的情况下操作空堆栈的错误。
于 2012-09-01T15:46:39.963 回答
1

您应该尝试使您的堆栈通用(如果您想允许添加任何其他类型),您应该尝试使其自动增长,通过在您的推送方法中使用检查,如果它已满,那么您重新分配空间它(创建另一个数组,可能是先前空间的两倍并逐个重新分配)。例如,您使用数组而不是链表的任何方式,恕我直言,这是个好主意。

于 2012-09-01T15:46:21.147 回答