0

我必须在java中实现一些堆栈的功能,并选择一个练习来解决,例如,在堆栈末尾插入一个新元素而不破坏顺序。我怎样才能做到这一点?

// stack.java
// demonstrates stacks
// to run this program: C>java StackApp
////////////////////////////////////////////////////////////////
class Stack
{
  private int maxSize; // size of stack array
  private long[] stackArray;
  private int top; // top of stack
//--------------------------------------------------------------
  public Stack(int s) // constructor
 {
    maxSize = s; // set array size
    stackArray = new long[maxSize]; // create array
    top = -1; // no items yet
  }
//--------------------------------------------------------------
   public void makeEmpty( ) {
    top = -1;
    }

   public void push(long j) // put item on top of stack 
   {
     stackArray[++top] = j; // increment top, insert item
    }
//--------------------------------------------------------------
   public long pop() // take item from top of stack
 { return stackArray[top--]; // access item, decrement top
  }
//--------------------------------------------------------------

   public long peek() // peek at top of stack
  { return stackArray[top];
   }
//--------------------------------------------------------------
   public boolean isEmpty() // true if stack is empty
   {return (top == -1);
    }
//--------------------------------------------------------------
   public boolean isFull() // true if stack is full
    {return (top == maxSize-1);
     }
  }
//--------------------------------------------------------------
 // end class StackX
4

1 回答 1

4

JVM 库中有预构建Stack的类;但是,如果您将此作为创建自己的堆栈的课程,则可以使用单链表轻松完成此操作。

您将需要两个类,一个Stack将呈现void push(Object),Object pop()和任何方法的Node类,以及一个代表链表中节点的类。

Stack在列表的头部维护一个成员变量,Stack在列表的尾部维护一个成员变量。将anObject推入堆栈将需要一个 newNode来保存对象,因此Node需要一个“数据”成员来引用 push Object,并需要一个“下一个”引用来引用“下一个” Node

推送问题的其余部分只是通过创建一个新的 向节点链添加元素Node,让它引用推送的对象,将它的下一个节点成员指向当前尾部,并更新Stack的当前尾部引用。Stack弹出将返回s tail引用的 Object Node,并将更新 tail 以指向 "next" Node

有特殊情况需要考虑,但并不难。基本上你在推空时需要小心Stack,当弹出时会产生空Stack

完成所有这些之后,您可以根据需要轻松添加peek()方法等。

于 2012-06-01T14:49:52.720 回答