有了前一篇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();
????????}
????}