1. We have moved from vBulletin to XenForo and you are viewing the site in the middle of the move. Though the functional aspect of everything is working fine, we are still working on other changes including the new design on Xenforo.
    Dismiss Notice

Help required regarding priority queueing implemented via linked list

Discussion in 'C' started by sam2012, Oct 5, 2012.

  1. sam2012

    sam2012 Banned

    Joined:
    Sep 23, 2012
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    I have a queue class code is given below:
    Code:
    struct ListNode
    {
        ListNode(int value);
        int value;
        ListNode* next;
    }; 
    ListNode::ListNode(int value): value(value), next(nullptr) {}
    
    public class queue
    {
    public:
        queue();
        ~queue();
        bool Empty() const;
        int Next() const;
        void Enqueue(int value);
        void Dequeue();
            void DisplayAll() const;
            int getP() const;
    
    
          private:
        // Disable copying to keep the example simple
    
       queue(queue const& obj);
    
        ListNode* head;
        ListNode* tail;
        gcroot<String^> name; // Added this
    };
    
    queue::queue():head(nullptr), tail(nullptr) {}
    
    queue::~queue()
    {
        while (head != nullptr)
        {
            Dequeue();
        }
    }
    
    
    bool queue::Empty() const
    {
        return head == nullptr;
    }
    
    int queue::Next() const
    {
        return head->value;
    }
    
    void queue::Enqueue(int value)
    {
        if (head == nullptr)
        {
            head = tail = new ListNode(value);
        }
        else
        {
            tail->next = new ListNode(value);
            tail = tail->next;
        }
    }
    
    void queue::Dequeue()
    {
        ListNode* temp = head->next;
        delete head;
        head = temp;
    }
    
    void queue::DisplayAll() const
    {
        for (ListNode* p = head; p; p = p->next)
        {
            Console::WriteLine("the element is {0}", p->value);
        }
    
    }
    
    
    I need some help regarding queues operation, which I already have made. To help explain the problem you need to look at this code and the queue operations given in the above posted code.consider we have 3 queues cat1, cat2, cat 3. I want to insert items with priority 1,2,3 respectively. which I am doing via this code. Now I want to process these inserted messages(or items "no"). First I want to process all messages in queue "cat1" and dequeue them one by one until its empty, then it should move to "cat2" and same process and then to "cat3".
    Code:
    no=noofmsg-1;
         if(Analysis[no].prio==1)
             cat1->Enqueue(no);
    
         else if(Analysis[no].prio==2)
             cat2->Enqueue(no);
    
         else if(Analysis[no].prio==3)
             cat3->Enqueue(no);
    
          while(!(cat1->Empty()))
             {
                p= cat1->Next();
                TimDep= currtime+expntl();
               // slist->Add(TimDep,"D");
    
                Analysis[p].TEsf=TimDep;
                Console::WriteLine(" the value at  is  Analysis{0} is {1}", p, Analysis[p].TEsf );
                /*avg1= Analysis[p].TEsf-Analysis[p].TEa;
                Console::WriteLine(" The priority 1 messages has a waiting time of {0} ", avg1 );*/
                cat1->Dequeue();
    
             }
    
      if(cat1->Empty())
         {
          while(!(cat2->Empty()))
             {
                p= cat2->Next();
                TimDep= currtime+expntl();
                //slist->Add(TimDep,"D");
    
                Analysis[p].TEsf=TimDep;
                //Console::WriteLine(" the value at  is  Analysis{0} is {1}", p, Analysis[p].TEsf );
                cat2->Dequeue();
             }
          }
       if((cat1->Empty())&&(cat2->Empty()))
         {
          while(!(cat3->Empty()))
             {
                p= cat3->Next();
                TimDep= currtime+expntl();
                //slist->Add(TimDep,"D");
    
                Analysis[p].TEsf=TimDep;
                //Console::WriteLine(" the value at  is  Analysis{0} is {1}", p, Analysis[p].TEsf );
                cat3->Dequeue();
             }
          }
    but this code is only processing items with priority 1. Can you help with this code please.......I am helpless. How can I process priority 2 and 3 items if they come before 1.
     

Share This Page