public override String ToString() { QueueElement iterator = first; StringBuilder builder = new StringBuilder(); builder.Append("["); if (iterator != null) { builder.Append(" "); builder.Append(iterator.GetPriority()); builder.Append(". "); builder.Append(iterator.GetData()); iterator = iterator.GetPrev(); while (iterator != null) { builder.Append(", "); builder.Append(iterator.GetPriority()); builder.Append(". "); builder.Append(iterator.GetData()); iterator = iterator.GetPrev(); } builder.Append(" "); } builder.Append("]"); return(builder.ToString()); }
public void Enqueue(T data, int priority) { QueueElement iterator = last; while (iterator != null && iterator.GetPriority() > priority) { iterator = iterator.GetNext(); } QueueElement element = new QueueElement(data, priority); // actualizar: first, last, element.prev, element.next, iterator.prev.next, iterator.prev if (last == null) // Primer elemento en cola { last = first = element; } else { if (iterator == null) // Elemento nuevo con mayor prioridad { element.SetPrev(first); first.SetNext(element); first = element; } else { if (iterator == first) // Elemento nuevo es el segundo elemento en cola, de igual o mayor prioridad que el primero { if (iterator == last) { element.SetNext(first); first.SetPrev(element); last = element; } else { element.SetPrev(first.GetPrev()); element.SetNext(first); first.GetPrev().SetNext(element); first.SetPrev(element); } } else { if (iterator == last) // Elemento nuevo es el ultimo elemento en cola { element.SetNext(last); last.SetPrev(element); last = element; } else // Elemento nuevo es elemento intermendio en cola { element.SetPrev(first.GetPrev()); element.SetNext(first); first.GetPrev().SetNext(element); first.SetPrev(element); } } } } }