ArrayList& LinkedList堆栈实现

时间:2012-11-03 21:37:42

标签: arraylist linked-list stack containers

我已经根据

接口编写了两个Stack实现
public interface Stack<T>{
   public void push(T t);
   public T pop();
   public boolean isEmpty();
}

第一个实现使用ArrayList作为元素的容器,而第二个实现使用LinkedList。为每个底层容器分别实现或只有一个独立于容器的堆栈实现是否更好?

日Thnx。

2 个答案:

答案 0 :(得分:0)

在回答您的问题之前,当您使用界面时,请在您的界面名称前添加“I”,例如: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类?

答案 1 :(得分:0)

如果一个实现在不同情况下优于其他实现,则应该同时实现。

但是,在堆栈的情况下,如果你只有push(),pop()和isEmpty(),则LinkedList或ArrayList在时间复杂度方面不会优于另一个。所以,你可以选择一个实现。

push(),pop()和isEmpty()的持续时间复杂度:

使用ArrayList:始终添加到列表的底部,并从底部删除。

使用LinkedList:始终添加到列表的前面并从前面删除。