Реализация на опашки чрез клас

Като се използва за основа реализацията на опашка чрез глобален масив, да се направи реализация на опашка чрез клас.

Публикувано в 12а с етикети . Постоянна връзка.

One Response to Реализация на опашки чрез клас

  1. Данаил каза:

    Ето и решението, което направихме заедно в часа:

    #include <iostream>
    #include <iomanip>
    #include <windows.h>
     
    using namespace std;
     
    // максимален брой елементи в опашката
    const int N=5;
    
    class Queue
     {
       private: 
         // указател към върха на опашката
         int head;
         // указател към края на опашката
         int tail;
         // масив за съхранение на елементите на опашката
         int s[N];
         // инициализиране на опашката
         void init();
       public:
         Queue();
         // проверка дали опашката е празна
         bool isEmpty();  
         // проверка дали опашката е пълна
         bool isFull();
         // запис на стойност в опашката
         bool push(int X);
         // извличане на стойност от опашката
         bool pop(int &X);
         // печат на опашката
         void print();
    };
    
    Queue::Queue()
    {
      init();
    }
    
    // инициализиране на опашката
    void Queue::init()
    {
      head=0;
      tail=0;
      for(int i=0;i<=N;i++) s[i]=0;
    }
     
    // проверка дали опашката е празна
    bool Queue::isEmpty() {
      return head==tail;
    }
     
    // проверка дали опашката е пълна
    bool Queue ::isFull() {
      return ((tail+1)%N)==head;
    }
     
    // запис на стойност в опашката
    bool Queue::push(int X)
    {
      bool ok = !isFull();
      if (ok){
        s[tail] = X;
        tail++;
        tail%=N;
      }
      return ok;
    }
     
    // извличане на стойност от опашката
    bool Queue::pop(int &X)
    {
      bool ok = !isEmpty();
      if (ok) {
        X = s[head];
        head++;
        head%=N;
      }
      return ok;
    }
     
    // печат на опашката
    void Queue::print() {
      cout<<endl<<"head : "<<head<<" tail: "<<tail<<"\nqueue: | ";
      if(!isEmpty())
        if (head<=tail)
          for(int i=head;i<tail;i++) cout<<setw(3)<<s[i]<<" | ";
        else {
          for(int i=head;i<N;i++) cout<<setw(3)<<s[i]<<" | ";
          for(int i=0;i<tail;i++) cout<<setw(3)<<s[i]<<" | ";
        }
      cout<<endl<<"array: | ";
      for(int i=0;i<N;i++) cout<<setw(3)<<s[i]<<" | ";
      cout<<endl<<"index: | ";
      for(int i=0;i<N;i++) cout<<setw(3)<<i<<" | ";
      cout<<endl<<endl;
    }
     
    int main ( )
    {
    	Queue s;
    	// добавяме елементи
    	cout<<endl;
    	s.push(4);    cout<<"push " << 4 << endl;
    	s.push(-20);  cout<<"push " << -20 << endl;
    	s.push(6);    cout<<"push " << 6 << endl;
    	s.push(14);   cout<<"push " << 14 << endl;
    	s.print();
    	system("pause");
    	// изтриваме елементи
    	int Y;
    	cout<<endl;
    	s.pop(Y); cout<<"pop " << Y << endl;
    	s.pop(Y); cout<<"pop " << Y << endl;
    	s.print();
    	system("pause");
    	// добавяме още елементи
    	cout<<endl;
    	s.push(-52);  cout<<"push " << -52 << endl;
    	s.push(11);   cout<<"push " << 11 << endl;
    	s.print();
    	system("pause");
    	// изтриваме елементи
    	cout<<endl;
    	s.pop(Y); cout<<"pop " << Y << endl;
    	s.pop(Y); cout<<"pop " << Y << endl;
    	s.pop(Y); cout<<"pop " << Y << endl;
    	s.pop(Y); cout<<"pop " << Y << endl;
    	s.print();
    	system("pause");
     
    return 0;
    }
    

Вашият коментар