// // This file contains the C# code from Program 6.11 of // "Data Structures and Algorithms // with Object-Oriented Design Patterns in C#" // by Bruno R. Preiss. // // Copyright (c) 2001--2002 by Bruno R. Preiss, P.Eng. All rights reserved. // // http://www.brpreiss.com/books/opus6/programs/pgm06_11.txt // public class StackAsLinkedList : AbstractContainer, Stack { protected LinkedList list; private class Enumerator : IEnumerator { StackAsLinkedList stack; protected LinkedList.Element position = null; internal Enumerator(StackAsLinkedList stack) { this.stack = stack; } public bool MoveNext() { if (position == null) position = stack.list.Head; else position = position.Next; return position != null; } public object Current { get { if (position == null) throw new InvalidOperationException(); return position.Datum; } } public void Reset() { position = null; } } public override IEnumerator GetEnumerator() { return new Enumerator(this); } // ... }