// add element to head of queue public void WriteFirst(T data) { var node = new DoubleNode <T>(data); if (last == null) { last = node; } else { first.Previous = node; node.Next = first; } first = node; ++count; }
// add element to end of queue public void WriteLast(T data) { var node = new DoubleNode <T>(data); if (first == null) { first = node; } else { last.Next = node; node.Previous = last; } last = node; ++count; }
// get element from head of queue public T ReadFirst() { if (count == 0) { first = last = null; throw (new InvalidOperationException(EmptyMsg)); } var node = first; first = first.Next; node.Next = node.Previous = null; --count; return(node.Data); }