Advertisement
Guest User

dynamic1-1

a guest
May 23rd, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <time.h>
  4.  
  5. // Структура элемента очереди
  6. struct Node {
  7.     Node(int val): value(val), next(0), prev(0) {}
  8.  
  9.     Node* next; // указатель на следующий элемент
  10.     Node* prev; // указатель на предыдущий
  11.     int   value; // значение
  12. };
  13.  
  14. // Класс очереди
  15. class Queue {
  16. private:
  17.     Node* head; // Указатель на голову
  18.     Node* tail; // Указатель на хвост
  19.  
  20. public:
  21.     // Конструктор
  22.     Queue(): head(0), tail(0) {}
  23.  
  24.     // Метод добавления значения в очередь
  25.     void push(int n) {
  26.         // создаем значение
  27.         Node* node = new Node(n);
  28.        
  29.         // Если голова очереди не создана - присваиваем ей значение
  30.         if (!head)
  31.             head = node;
  32.         else { // если нет - добавляем элемент к хвосту
  33.             node->next = tail;
  34.             tail->prev = node;
  35.         }
  36.  
  37.         tail = node;
  38.     }
  39.  
  40.     // Метод удаления элемента из начала очереди
  41.     void pop() {
  42.         Node* node;
  43.  
  44.         // удаляем первый элемент, ставим предыдущий на его место
  45.         node = head->prev;
  46.         delete head;
  47.         head = node;
  48.  
  49.         // если теперь голова равна нулю, то удаляем
  50.         if (!head)
  51.             tail = 0;
  52.     }
  53.  
  54.     // Метод для получения головы очереди
  55.     int* front() {
  56.         return head ? &head->value : 0;    
  57.     }
  58.  
  59.     // Метод для получения конца очереди
  60.     int* back() {
  61.         return tail ? &tail->value : 0;
  62.     }
  63.  
  64.     // Оператор вывода содержимого очереди на экран
  65.     friend std::ostream& operator<<(std::ostream& os, const Queue& queue) {
  66.         Node* node = queue.head;
  67.         while (node) {
  68.             os << node->value << " ";
  69.             node = node->prev;        
  70.         }    
  71.         return os;
  72.     }
  73. };
  74.  
  75. // Процедура генерации случайных значений массива
  76. void generate_numbers(int nums[], int size) {
  77.     for (int i = 0; i < size; ++i)
  78.         nums[i] = rand() % 100;
  79. }
  80.  
  81. int main() {
  82.     srand(clock()); // инициализируем ранд текущим временем
  83.     int nums[20]; // массив чисел
  84.    
  85.     generate_numbers(nums, 20); // вызываем процедуру генерации случайных значений массива
  86.  
  87.     Queue even, odd; // очереди четных и нечетных элементов
  88.  
  89.     for (int i = 0; i < 20; ++i) {
  90.         // Если элемент четный - кладем его в четную очередь, если нет - в нечетную
  91.         if (nums[i] % 2 == 0)
  92.             even.push(nums[i]);
  93.         else
  94.             odd.push(nums[i]);
  95.     }
  96.    
  97.     std::cout << "Очередь четных чисел: " << std::endl;
  98.     std::cout << even << std::endl;
  99.     std::cout << "Очередь нечетных чисел: " << std::endl;
  100.     std::cout << odd << std::endl;
  101.  
  102.     std::cout << "Указатели на начало и конец очереди четных чисел: " << std::endl;
  103.     std::cout << even.front() << " : " << even.back() << std::endl;
  104.     std::cout << "Указатели на начало и конец очереди нечетеных чисел: " << std::endl;
  105.     std::cout << odd.front() << " : " << odd.back() << std::endl;
  106.  
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement