2012-06-01 48 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()方法等。