2012-06-01 49 views
0

我必须在java中实现一些堆栈的函数,并选择一个练习来解决,例如,在堆栈的末尾插入一个新元素而不会中断顺序。我怎样才能做到这一点?在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 
+7

[你有什么尝试?](http://www.whathaveyoutried.com/)另外,“堆栈结束”的意思是推?或者把它作为第一个元素?因为这不是一个堆栈应该如何运作的。 –

+1

你有什么尝试?你对这个*如何工作有什么想法?你卡在哪里? – Polygnome

+7

这是功课吗? – aglassman

回答

4

在JVM库中有预建的Stack类;但是,如果您将此作为创建自己的堆栈的教训,则可以通过单链表执行此操作。

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

维护列表头部的Stack中的一个成员变量以及列表尾部的Stack中的一个成员变量。将Object推入堆栈将需要一个新的Node来容纳该对象,因此Node将需要“数据”成员来引用推送的Object,以及对“下一个”Node的“下一个”引用。

推动问题的其余部分只是通过装箱新Node将元素添加到节点的链,具有它引用推对象,指向它的下一个节点构件到当前尾部,以及更新Stack目前的尾参考。 Popping将返回由Stack的尾部Node引用的对象,并将更新尾部以指向“下一个”Node

有特殊情况需要考虑,但它们并不难。基本上你需要小心,当推空的Stack,当弹出将是一个空的Stack

做完所有这些之后,您可以轻松地添加peek()方法等。