Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <time.h>
- // Структура элемента очереди
- struct Node {
- Node(int val): value(val), next(0), prev(0) {}
- Node* next; // указатель на следующий элемент
- Node* prev; // указатель на предыдущий
- int value; // значение
- };
- // Класс очереди
- class Queue {
- private:
- Node* head; // Указатель на голову
- Node* tail; // Указатель на хвост
- public:
- // Конструктор
- Queue(): head(0), tail(0) {}
- // Метод добавления значения в очередь
- void push(int n) {
- // создаем значение
- Node* node = new Node(n);
- // Если голова очереди не создана - присваиваем ей значение
- if (!head)
- head = node;
- else { // если нет - добавляем элемент к хвосту
- node->next = tail;
- tail->prev = node;
- }
- tail = node;
- }
- // Метод удаления элемента из начала очереди
- void pop() {
- Node* node;
- // удаляем первый элемент, ставим предыдущий на его место
- node = head->prev;
- delete head;
- head = node;
- // если теперь голова равна нулю, то удаляем
- if (!head)
- tail = 0;
- }
- // Метод для получения головы очереди
- int* front() {
- return head ? &head->value : 0;
- }
- // Метод для получения конца очереди
- int* back() {
- return tail ? &tail->value : 0;
- }
- // Оператор вывода содержимого очереди на экран
- friend std::ostream& operator<<(std::ostream& os, const Queue& queue) {
- Node* node = queue.head;
- while (node) {
- os << node->value << " ";
- node = node->prev;
- }
- return os;
- }
- };
- // Процедура генерации случайных значений массива
- void generate_numbers(int nums[], int size) {
- for (int i = 0; i < size; ++i)
- nums[i] = rand() % 100;
- }
- int main() {
- srand(clock()); // инициализируем ранд текущим временем
- int nums[20]; // массив чисел
- generate_numbers(nums, 20); // вызываем процедуру генерации случайных значений массива
- Queue even, odd; // очереди четных и нечетных элементов
- for (int i = 0; i < 20; ++i) {
- // Если элемент четный - кладем его в четную очередь, если нет - в нечетную
- if (nums[i] % 2 == 0)
- even.push(nums[i]);
- else
- odd.push(nums[i]);
- }
- std::cout << "Очередь четных чисел: " << std::endl;
- std::cout << even << std::endl;
- std::cout << "Очередь нечетных чисел: " << std::endl;
- std::cout << odd << std::endl;
- std::cout << "Указатели на начало и конец очереди четных чисел: " << std::endl;
- std::cout << even.front() << " : " << even.back() << std::endl;
- std::cout << "Указатели на начало и конец очереди нечетеных чисел: " << std::endl;
- std::cout << odd.front() << " : " << odd.back() << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement