예제 #1
0
        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());
        }
예제 #2
0
        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);
                        }
                    }
                }
            }
        }