10.3. Creating a More Versatile Queue

Problem

You need a queue object in which you can explicitly control the adding and removing of objects to either the head (top) or tail (bottom).

Solution

A queue that allows explicit removal of items from the head and the tail is called a double-queue.

This class is defined as follows:

using System; using System.Collections; [Serializable] public class DblQueue : ICollection, IEnumerable, ICloneable { public DblQueue( ) { internalList = new ArrayList( ); } public DblQueue(ICollection coll) { internalList = new ArrayList(coll); } protected ArrayList internalList = null; public virtual int Count { get {return (internalList.Count);} } public virtual bool IsSynchronized { get {return (false);} } public virtual object SyncRoot { get {return (this);} } public static DblQueue Synchronized(DblQueue dqueue) { if (dqueue == null) { throw (new ArgumentNullException("dqueue")); } return (new SyncDeQueue(dqueue)); } public virtual void Clear( ) { internalList.Clear( ); } public virtual object Clone( ) { // Make a new DQ DblQueue newDQ = new DblQueue(this); return newDQ; } public virtual bool Contains(object obj) { return (internalList.Contains(obj)); } public virtual void CopyTo(Array array, int index) { internalList.CopyTo(array, index); } public virtual object DequeueHead( ) { object retObj = internalList[0]; internalList.RemoveAt(0); return (retObj); } public virtual object DequeueTail( ) { object retObj = internalList[InternalList.Count - 1]; internalList.RemoveAt(InternalList.Count ...

Get C# Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.