C#實現棧和隊列
有了前一篇C#鏈表的實現,實現棧和隊列易如反掌。棧,利用單向鏈表實現:
public abstract class AbstractStack
{
public abstract Object Pop();
public abstract void Push(Object obj);
public abstract bool IsEmpty();
public abstract Object Top();
public abstract void Clear();
}
public class Stack : AbstractStack
{
private SList list;
public Stack()
{
list = new SList();
}
public override bool IsEmpty()
{
return list.IsEmpty();
}
public override void Push(Object obj)
{
list.Push(obj);
}
public override object Pop()
{
return list.Pop();
}
public override object Top()
{
return list.getTail();
}
public override void Clear()
{
list.Clear();
}
}
{
public abstract Object Pop();
public abstract void Push(Object obj);
public abstract bool IsEmpty();
public abstract Object Top();
public abstract void Clear();
}
public class Stack : AbstractStack
{
private SList list;
public Stack()
{
list = new SList();
}
public override bool IsEmpty()
{
return list.IsEmpty();
}
public override void Push(Object obj)
{
list.Push(obj);
}
public override object Pop()
{
return list.Pop();
}
public override object Top()
{
return list.getTail();
}
public override void Clear()
{
list.Clear();
}
}
隊列的實現,通過雙向鏈表實現,對於環形數組的實現請參考《數組結構之棧與鏈表》:
public interface Queue
{
bool IsEmpty();
void Enqueue(Object obj);
Object Dequeue();
Object First();
}
public class ListQueue:Queue
{
private LinkedList list;
public ListQueue()
{
list = new LinkedList();
}
public bool IsEmpty()
{
return list.IsEmpty();
}
public void Enqueue(Object obj)
{
list.Push(obj);
}
public Object Dequeue()
{
return list.Shift();
}
public Object First()
{
return list.getHead();
}
}
{
bool IsEmpty();
void Enqueue(Object obj);
Object Dequeue();
Object First();
}
public class ListQueue:Queue
{
private LinkedList list;
public ListQueue()
{
list = new LinkedList();
}
public bool IsEmpty()
{
return list.IsEmpty();
}
public void Enqueue(Object obj)
{
list.Push(obj);
}
public Object Dequeue()
{
return list.Shift();
}
public Object First()
{
return list.getHead();
}
}
文章轉自莊周夢蝶 ,原文發布時間5.17
最後更新:2017-05-17 12:32:18