我的教授“实现静态抽象数据类型”是什么意思?

时间:2018-10-08 20:07:07

标签: java abstract-data-type

在我们的课堂上,我们制作两种不同的抽象数据类型,Double StackLeaky Stack。创建它们没有问题,但是我的教授为这两个ADT输入了作业详细信息,以“提供ADT的有效静态实现”。但是,这到底是什么意思?我明天可以问他,但是我想今天完成这项任务。有人知道他的意思是什么吗?

1 个答案:

答案 0 :(得分:3)

一种可能的解释是,解决方案是使用固定大小的“静态”底层结构(例如数组),而不是使用动态增长量。因此,每个堆栈将具有预先分配的最大容量。因此,我希望在push(...)操作上抛出一个异常,该异常会超出堆栈的容量(就像pop()操作会抛出一个空堆栈一样)。

一个静态实现的示例(尽管它允许设置总容量),可能类似于以下示例。由于直接使用索引,因此访问将始终为O(1),没有数据结构的遍历,也没有内存重新分配。请注意,该代码是示例,尚未经过测试。如果所讨论的方法指定了特定的堆栈类型(例如int或char),则可以取消使用Generic。

public class AnotherStack<T>
{
  private final T[] values;
  private int loc = 0;

  // must use the suppress, as we are using a raw Object array
  //   which is necessitated as cannot make a generic array  
  // See Effective Java
  @SuppressWarnings("unchecked")
  public AnotherStack(int size)
  {
    values = (T[])new Object[size];
  }


  public void push(T val)
  {
      if (loc < values.length) {
          values[loc++] = val;
      }
      else {
          throw new IllegalStateException("Stack full");
      }
  }

  public T pop()
  {
      if (loc == 0) {
          throw new IllegalStateException("Stack empty");
      }
      return (values[--loc]);
  }

  // other methods
}