Разработать функции для работы с приоритетной очередью

Уровень сложности:

Запрограммировать функции для работы с приоритетной очередью. Очередь запросов формируется согласно приоритету, снятие выполняется подряд, начиная с младших адресов ( то есть с начала очереди). Очередь должна представлять из себя массив, в котором должен выполняться сдвиг после каждого чтения  и сдвиг — после достижения границы памяти, которая выделена для очереди. Приоритет: минимальное значение числового параметра, при совпадении параметров — LIFO

К сожалению, решения данной задачи пока нет. Если Вы решили эту задачу, сообщите нам, и мы выложим её на сайте.

E-mail : admin@cppstudio.com

 

Автор: admin
Дата: 12.09.2012
Поделиться:

Комментарии

  1. Arthur

    #include<iostream>
    #include<cstdlib>
    #include <ctime>
    using namespace std;
    
    //---------------------------------------------------------
    template<class Item>
    class PQ
    {
    private:
        Item* pq;
        int N, head, tail, numb;
        const int MAX = 100;
    
        void exch(Item &A, Item &B)
        {
           Item t = A;
           A = B;
           B = t;
        }
    //----------------------------------------------------------
       void compexch(Item &A, Item &B)
       {
          if(B < A) exch(A, B);
       }
    public:
    //--------------------------------------------------------
        PQ()
        {
            pq = new Item[MAX];
            N = MAX ;
            head = 0;
            tail = 0;
            numb = 0;
        }
     //---------------------------------------------------------
        PQ(int maxN)
        {
            pq = new Item[maxN];
            N = maxN ;
            head = 0;
            tail = 0;
            numb = 0;
        }
    //--------------------------------------------------------
        int empty()  const
        {
            return numb == 0;
        }
    //---------------------------------------------------------
        void insert(Item item)
        {
            pq[tail++] = item;
    
            if(numb<N)
                numb++;
    
            if(tail == N )
                tail = 0;
        }
    //------------------------------------------------------------
        Item getmax()
        {
            int max = numb-1;
            for(int j = numb-2; j>=head; j--)
                if(pq[max] < pq[j])
                   max = j;
            exch(pq[max], pq[numb-1]);
            tail = numb-1;
    
            return pq[--numb];
        }
    //-------------------------------------------------------------
        Item getmin()
        {
            int min = numb-1;
    
            for(int j = numb-2; j>=head; j--)
                if(pq[j] < pq[min])
                   min = j;
            exch(pq[min], pq[numb-1]);
            tail = numb-1;
    
            return pq[--numb];
        }
    //--------------------------------------------------------------
        void print()  const
        {
            for(int y = head; y<numb; y++)
                cout<<pq[y]<<"   ";
        }
    };
    //----------------------------------------------------
    int main()
    {
     setlocale(LC_ALL, "rus");
     PQ<int> p(10);
    
     cout<<"Выполнение сдвига: \n\n";
      for(int i = 0; i<10; i++)
         p.insert(i+1);
      p.print();
    
      p.insert(15);
      p.insert(25);
      p.insert(20);
    
      cout<<endl;
      p.print();
    
      cout<<"\n\nПриоритет: минимальное значение числового параметра: \n\n";
      while(!p.empty())
        cout<<p.getmin()<<"   ";
    
       cout<<"\n\nПри совпадении параметров LIFO: \n";
    
      for(int i = 0; i<5; i++)
         p.insert(i+1);
      for(int i = 0; i<5; i++)
         p.insert(i+1);
    
      cout<<endl;
      p.print();
    
      cout<<"\n\nmin = "<<p.getmin()<<endl;
    
      cout<<endl;
      p.print();
    
     return 0;
    }

     

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.