Advertisement
madalinaradu

Pb 20 coada prioritati

May 5th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.71 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include<iostream>
  3. #include <queue>
  4. #include<ctime>
  5. #include<cstdlib>
  6.  
  7. using namespace std;
  8.  
  9. class Articol{
  10.     int prioritate;
  11.    public:
  12.     Articol(int prioritate=0){
  13.         this->prioritate = prioritate;
  14.     }
  15.     void afisare(){
  16.         cout<<"Articol (prioritate: "<<prioritate<<")";
  17.     }
  18.     friend bool operator < (const Articol &a1, const Articol &a2);
  19. };
  20.  
  21. bool operator < (const Articol &a1, const Articol &a2){
  22.     return a1.prioritate < a2.prioritate;
  23. }
  24.  
  25.  
  26. /** Clasa abstracta*/
  27. class CoadaPrioritati{
  28.    public:
  29.        virtual bool empty() = 0;
  30.        virtual void push(Articol a) = 0; //Adauga in coada un element
  31.        virtual void pop() = 0; //Sterge elementul de prioritate maxima (ultimul element daca sunt ordonate);
  32.        virtual Articol top() = 0; //Intoarce elementul de prioritate maxima;
  33. };
  34.  
  35.  
  36. class CoadaPrioritatiTablou: public CoadaPrioritati{
  37.     int n; //nr efectiv de elemente din coada
  38.     Articol t[100]; // tabloul unde retin elementele
  39. public:
  40.     CoadaPrioritatiTablou(){
  41.         n = 0;
  42.     }
  43.  
  44.     bool empty(){
  45.         if(n==0)
  46.             return true;
  47.          else
  48.            return false;
  49.        //return (n == 0);
  50.     };
  51.  
  52.     void push(Articol a){
  53.         int i;
  54.         if (n<100){
  55.             //Elementul a se inseraza in tabloul deja ordonat a.i. sa se pastreze ordonarea.
  56.             //Elementul daca avem elementele 7 9 10 si inserez 8 o sa obtinem 7 8 9 10
  57.             for(i=n-1;i>=0 && a<t[i];i--){
  58.                t[i+1] = t[i];
  59.             }
  60.  
  61.             t[i+1]=a;
  62.             n++;
  63.         }
  64.     }
  65.     void pop(){ //Sterge elementul de prioritate maxima (ultimul element daca sunt ordonate);
  66.      if (n>0){
  67.         n--;
  68.      }
  69.     }
  70.  
  71.     Articol top() {//Intoarce elementul de prioritate maxima;
  72.      if (n>0){
  73.         return t[n-1];
  74.      } else {
  75.         cout<<"Eroare ";
  76.         exit(1);
  77.      }
  78.     }
  79. };
  80.  
  81. class CoadaPrioritatiLista: public CoadaPrioritati{
  82.     struct Nod{
  83.         Articol info;
  84.         Nod* next;
  85.  
  86.         Nod(Articol info, Nod* next=NULL){
  87.             this->info = info;
  88.             this -> next = next;
  89.         }
  90.     };
  91.     Nod *prim;
  92.  
  93.    public:
  94.        CoadaPrioritatiLista(){
  95.         prim = NULL;
  96.        }
  97.  
  98.         bool empty() {
  99.             return prim == NULL;
  100.         }
  101.  
  102.         void push(Articol a){
  103.          Nod *p = new Nod(a);
  104.          if (prim == NULL){
  105.             prim = p;
  106.          } else {
  107.  
  108.              Nod *q = prim;
  109.              Nod *r=NULL;
  110.              while(q != NULL && a<q->info){
  111.                 r = q;
  112.                 q = q->next;
  113.              }
  114.              p->next = q;
  115.              if (r == NULL){
  116.                 prim = p;
  117.              } else {
  118.                 r->next = p;
  119.              }
  120.          }
  121.         }
  122.        void pop(){ //Sterge elementul de prioritate maxima (primul element daca sunt ordonate descrescator);
  123.             if (!empty()){
  124.                 Nod *p = prim;
  125.                 prim = prim ->next;
  126.                 delete p;
  127.             }
  128.        }
  129.        Articol top() {//Intoarce elementul de prioritate maxima (primul element);
  130.             if (!empty()){
  131.                 return prim->info;
  132.             } else {
  133.                 cout<<"Nu am ce sa scot"<<endl;
  134.                 exit(1);
  135.             }
  136.        }
  137. };
  138.  
  139. int main()
  140. {   Articol x;
  141.     //priority_queue <Articol> q;
  142.  
  143.     CoadaPrioritatiTablou q;
  144.     //CoadaPrioritatiLista q;
  145.     q.push(Articol(1));
  146.     q.push(Articol(8));
  147.     q.push(Articol(3));
  148.     q.push(Articol(4));
  149.     q.push(Articol(3));
  150.  
  151.     cout<<"Extrag articole:"<<endl;
  152.     while (!q.empty())
  153.     {
  154.         x = q.top();
  155.         //cout << x << " ";
  156.         x.afisare();
  157.         cout<<endl;
  158.         q.pop();
  159.     }
  160.  
  161.     return 0;
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement