SHARE
TWEET

Untitled

a guest Jun 24th, 2019 60 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define MYQUEUE1_EQE  0x0000  // возврат в случае пустоты очереди
  2.  
  3. struct Queue               // Блок управления очередью
  4. {
  5. int Head;           // голова очереди
  6. int Tail;           // хвост очереди
  7. int Size;           // размер очереди (макс. колич.+1)
  8. void** Data;        // хранилище данных очереди
  9. Queue(int size)     // физический размер очереди  
  10. {
  11.     Head = Tail = 0;
  12.     Data = new void*[Size = size + 1];
  13. }
  14. bool isFull() const;       // очередь заполненa ?
  15. bool isEmpty()const;       // очередь пустa ?
  16. };
  17.  
  18. Queue createQueue(int n);            // n – макс. количество
  19. Queue createQueue(const Queue& pq);  // создать очередь по образцу
  20. bool  enQueue(Queue& q, void* x);    // добавить x
  21. void* delQueue(Queue& q);            // удалить элемент
  22. void* peekQueue(const Queue& q);     // получить первый элемент
  23. int clearQueue(Queue& q);            // очистить очередь
  24. void releaseQueue(Queue& q);         // освободить ресурсы
  25. void* findMaxQueue(Queue &q);
  26.      
  27. #include "pch.h"
  28.    #include "Queqe.h"
  29.    #include <iostream>
  30.  
  31.    Queue createQueue(int n)          // Выделить ресурс для очереди
  32.    {
  33.     return *(new Queue(n));
  34.    };
  35.    Queue createQueue(const Queue &pq)   // Создать очередь
  36.    {
  37.     Queue *rc = new Queue(pq.Size - 1);
  38.     rc->Head = pq.Head;
  39.     rc->Tail = pq.Tail;
  40.     for (int i = 0; i < pq.Size; i++)
  41.         rc->Data[i] = pq.Data[i];
  42.     return *rc;
  43.    }
  44.    bool Queue::isFull() const         // Очередь заполненa?
  45.    {
  46.     return (Head % Size == (Tail + 1) % Size);
  47.    }
  48.    bool Queue::isEmpty()const         // Очередь пустa?
  49.    {
  50.     return (Head % Size == Tail % Size);
  51.    }
  52.    bool enQueue(Queue &q, void* x)      // Добавить элемент x
  53.    {
  54.     bool rc = true;
  55.     if (rc = !q.isFull())
  56.     {
  57.         q.Data[q.Tail] = x;
  58.         q.Tail = (q.Tail + 1) % q.Size;
  59.     }
  60.     else
  61.         rc = false;
  62.     return rc;
  63.    };
  64.  
  65.    void* delQueue(Queue &q)               // Удалить элемент
  66.    {
  67.     void* rc = (void*)MYQUEUE1_EQE;
  68.     if (!q.isEmpty())
  69.     {
  70.         rc = q.Data[q.Head];
  71.         q.Head = (q.Head + 1) % q.Size;
  72.     }
  73.     else
  74.         rc = NULL;
  75.     return rc;
  76.    }
  77.  
  78.    void* peekQueue(const Queue &q)  // Получить первый элемент очереди
  79.    {
  80.     void* rc = (void*)MYQUEUE1_EQE;
  81.     if (!q.isEmpty())
  82.         rc = q.Data[q.Head];
  83.     else
  84.         rc = NULL;
  85.     return rc;
  86.    }
  87.  
  88.    int  clearQueue(Queue &q)       // Очистить очередь
  89.    {
  90.     int rc = (q.Tail - q.Head) >= 0 ? q.Tail - q.Head : (q.Size - q.Head + q.Tail + 1);
  91.     q.Tail = q.Head = 0;
  92.     return rc;     // колич. элементов до очистки
  93.    }
  94.    void releaseQueue(Queue &q)     // Освободить ресурсы очереди
  95.    {
  96.     delete[] q.Data;
  97.     q.Size = 1;
  98.     q.Head = q.Tail = 0;
  99.    }
  100.  
  101.    void* findMaxQueue(Queue &q) {
  102.     void* max =q.Data[1];
  103.     return max;
  104.    }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top