Stack<string> s = new Stack<string>(); s.Push("A"); s.Push("B"); s.Push("C"); // C,B,A s.Reverse(); // A,B,C>I have created a couple of extension methods that can reverse a Queue or a Stack
>// Queue_EnQueue.cs > > public static partial class ExtensionMethods_Queue > { > //______________________________________________________________________ > /// <summary> > /// Enqueues a sequence of items of IEnumerable(T) > /// </summary> > /// <typeparam name="T"></typeparam> > /// <param name="queue"></param> > /// <param name="items">IEnumerable(T)</param> > public static void Enqueue<T>(this Queue<T> queue, IEnumerable<T> items) > { > queue.Enqueue(items, false); > } > //______________________________________________________________________ > /// <summary> > /// Enqueues a sequence of items of IEnumerable(T) > /// </summary> > /// <typeparam name="T"></typeparam> > /// <param name="queue"></param> > /// <param name="items">IEnumerable(T)</param> > /// <param name="reversed">reverse the sequence of IEnumerable(T) before Enqueue</param> > public static void Enqueue<T>( > this Queue<T> queue, > IEnumerable<T> items, > bool reversed > ) > { > if (reversed) > items = items.Reverse(); > > foreach (T item in items) > queue.Enqueue(item); > > } > //______________________________________________________________________ > } > >// Queue_Reverse.cs > public static partial class ExtensionMethods_Queue > { > //______________________________________________________________________ > /// <summary> > /// reverses the elements in place > /// </summary> > /// <param name="queue"></param> > /// <returns>the same queue</returns> > public static Queue<T> Reverse<T>(this Queue<T> queue) > { > // (1) copy contents to new array > var contents = new T[queue.Count]; > queue.CopyTo(contents, 0); > > // (2) Clear the queue > queue.Clear(); > > // (3) enqueue the array > queue.Enqueue(contents, true); > > return queue; > > } > //______________________________________________________________________ > } > >>
>// Stack_push.cs > public static partial class ExtensionMethods_Stack > { > //______________________________________________________________________ > /// <summary> > /// Pushes a sequence of items of IEnumerable(T) > /// </summary> > /// <typeparam name="T"></typeparam> > /// <param name="stack"></param> > /// <param name="items">IEnumerable(T)</param> > public static void Push<T>(this Stack<T> stack, IEnumerable<T> items) > { > stack.Push(items, false); > } > //______________________________________________________________________ > /// <summary> > /// > /// </summary> > /// <typeparam name="T"></typeparam> > /// <param name="stack"></param> > /// <param name="items">IEnumerable(T)</param> > /// <param name="reversed">reverse the sequence of IEnumerable(T) before Enqueue</param> > public static void Push<T>(this Stack<T> stack, IEnumerable<T> items, bool reversed) > { > if (reversed) > items = items.Reverse(); > > foreach (T item in items) > stack.Push(item); > > } > //______________________________________________________________________ > } > >// Stack_Reverse.cs > public static partial class ExtensionMethods_Stack > { > //______________________________________________________________________ > /// <summary> > /// Reverses the stack > /// </summary> > /// <typeparam name="T"></typeparam> > /// <param name="stack"></param> > /// <returns>the stack</returns> > public static Stack<T> Reverse<T>(this Stack<T> stack) > { > // Copy contents to array > var contents = new T[stack.Count]; > stack.CopyTo(contents, 0); > > // Clear the stack > stack.Clear(); > > stack.Push(contents); > > return stack; > } > //______________________________________________________________________ > } >