O'Reilly logo

C# Cookbook by Jay Hilyard, Stephen Teilhet

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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 ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required