SeriousVenom

20.02.2020

Feb 19th, 2020
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.12 KB | None | 0 0
  1. // 20.02.2020.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <queue>
  7. #include <string>
  8.  
  9.  
  10. using namespace std;
  11.  
  12. typedef int QueueItemType;
  13.  
  14. class Queue
  15. {
  16. public:
  17.     Queue(); //конструктор по умолчанию  
  18.     Queue(const Queue &Q); //конструктор копирования
  19.     ~Queue(); //деструктор
  20.     bool isEmpty() const; //проверка очереди на пустоту
  21.     void enqueue(QueueItemType newItem); //добавление элемента в очередь
  22.     void dequeue(); //удаление элемента из очереди
  23.     void dequeue(QueueItemType &queueFront);
  24.     void getFront(QueueItemType &queueFront) const; //извлечение головы списка
  25.     void show(); //вывод очереди
  26.  
  27. private:
  28.     struct QueueNode
  29.     {
  30.         QueueItemType item;
  31.         QueueNode *next;
  32.     };
  33.  
  34.     QueueNode *frontPtr;
  35.     QueueNode *backPtr;
  36.    
  37. };
  38.  
  39.  
  40. Queue::Queue() : backPtr(NULL), frontPtr(NULL)
  41. {
  42. }
  43.  
  44. Queue::Queue(const Queue &Q)
  45. {
  46.  
  47.     QueueNode *temp = Q.frontPtr;
  48.     while (temp)
  49.     {
  50.         enqueue(temp->item);
  51.         temp = temp->next;
  52.     }
  53. }
  54.  
  55. Queue::~Queue()
  56. {
  57.     while (!isEmpty())
  58.         dequeue();
  59. }
  60.  
  61. bool Queue::isEmpty() const
  62. {
  63.     return bool(backPtr == NULL);
  64. }
  65.  
  66. void Queue::enqueue(QueueItemType newItem)
  67. {
  68.     QueueNode *newPtr = new QueueNode;
  69.     if (newPtr == NULL) cout << "Error: enqueue - enough memory"; //проверка выделениия памяти
  70.     else {
  71.         newPtr->item = newItem; //запись данных в новый узел
  72.         newPtr->next = 0;
  73.  
  74.         if (isEmpty()) frontPtr = newPtr; //вставка элемента в пустую очередь
  75.         else
  76.             backPtr->next = newPtr; //вставка элемента не в пустую очередь
  77.         backPtr = newPtr; //новый элемент стоит в конце очереди
  78.     }      
  79. }
  80.  
  81. void Queue::dequeue()
  82. {
  83.     if (isEmpty()) cout << "dequeue - The queue is empty";
  84.     else
  85.     {
  86.         QueueNode *tempPtr = frontPtr;
  87.         if (frontPtr == backPtr)
  88.         {
  89.             frontPtr = NULL;
  90.             backPtr = NULL;
  91.         }
  92.         else frontPtr = frontPtr->next;
  93.        
  94.         tempPtr->next = NULL;
  95.         delete tempPtr;
  96.     }
  97. }
  98.  
  99. void Queue::dequeue(QueueItemType& queueFront)
  100. {
  101. if(isEmpty()) cout << "dequeue - The queue is empty";
  102. else
  103. {
  104.     queueFront = frontPtr->item;
  105.     dequeue();
  106.     }
  107. }
  108.  
  109. void Queue::getFront(QueueItemType& queueFront) const
  110. {
  111.     if (isEmpty()) cout << "getFront - The queue is empty";
  112.     else queueFront = frontPtr->item;
  113. }
  114.  
  115. void Queue::show()
  116. {
  117.     QueueNode* current = frontPtr;
  118.     while (current != NULL) {
  119.         cout << current->item << " ";
  120.         current = current->next;
  121.     }
  122.     cout << endl;
  123. }
  124.  
  125.  
  126. int main()
  127. {
  128.     Queue cain;
  129.    
  130.     //int a;
  131.    
  132.  
  133.     cain.enqueue(54);
  134.     cain.enqueue(5);
  135.     cain.enqueue(7);
  136.     cain.enqueue(9);
  137.     cain.enqueue(24);
  138.     cain.enqueue(53);
  139.     /*while (!cain.isEmpty())
  140.     {
  141.         cain.getFront(a);
  142.         cout << a;
  143.         cain.dequeue();
  144.     }*/
  145.     //cain.dequeue();
  146.     cout << "Queue: ";
  147.     cain.show();
  148.     if (cain.isEmpty()) cout << "Queue is empty\n";
  149.     else cout << "Queue is not empty\n";
  150.    
  151.  
  152.     return 0;
  153. }
Advertisement
Add Comment
Please, Sign In to add comment