2012-11-03 50 views
1

我在下面的ArrayList&鏈表棧實現

public interface Stack<T>{ 
    public void push(T t); 
    public T pop(); 
    public boolean isEmpty(); 
} 

先執行寫入堆棧的兩個實現基於接口使用ArrayList作爲元素的容器,而第二實施方式使用鏈表。爲每個底層容器分別實現或者只有一個獨立於容器的堆棧實現是更好的嗎?

Thnx。

回答

0

之前回答你的問題,當你使用的界面,添加「我」你的接口名稱之前,如:ISTACK

當您使用界面爲每個類,它實現你的注意力,當然,你必須重新 - 爲每個類編寫接口的方法。因爲,接口沒有實現那裏的方法,直到接口被某些類繼承,而不是提及容器的實現有所不同。

例子:

class YourStackOne<T>: IStack<T> 
{ 
//Container 
LinkedLink<T> ContainElement; 

public void push(T t){//implementation for YourStackOne..} 
public T pop(){//implementation for YourStackOne..} 
public boolean isEmpty{//implementation for YourStackOne..} 
} 

class YourStackTwo: IStack<int> 
{ 
//Container 
ArrayList ContainElement; 

public void push(int t){//implementation for YourStackTwo..} 
public int pop(){//implementation for YourStackTwo..} 
public boolean isEmpty{//implementation for YourStackTwo..} 
} 

順便說一句,如果你在使用.NET編寫,你爲什麼不使用Stack類?

0

如果在不同情況下一個實現比其他實現更好,那麼您應該同時執行這兩個實現。但是,在堆棧的情況下,如果你只是push(),pop()和isEmpty(),LinkedList或者ArrayList在時間複雜性方面將不會優於另一個。所以,你可以有一個你選擇的實現。

推送常量時間複雜度(),流行(),和的isEmpty():

使用ArrayList的:總是添加到列表的底部,並從底部移除。

使用LinkedList:始終添加到列表的前面並從前面刪除。