Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "queue.h"
- #include <cstring>
- #include <algorithm>
- // Деструктор очереди
- Queue::~Queue()
- {
- delete[] _queue;
- }
- // Конструктор
- Queue::Queue(size_t size) : _size(size + 1), _queue(new int[_size]), _tail(0), _head(0) {}
- // Конструктор копирования
- Queue::Queue(Queue const& other) : _size(other._size), _queue(new int[_size]), _tail(other._tail), _head(other._head)
- {
- memcpy(_queue, other._queue, _size);
- }
- bool Queue::isEmpty()
- {
- return _head == _tail;
- }
- // Метод push
- // Если не было найдено свободного места в очереди, то возвращает 0
- // иначе добавляет в очередь и возвращает 1
- int Queue::push(int data)
- {
- size_t oldtail = _tail;
- _tail = (_tail + 1) % _size;
- if (_tail != _head)
- {
- _queue[oldtail] = data;
- return 1;
- }
- _tail = oldtail;
- return 0;
- }
- // Метод pop
- int Queue::pop()
- {
- if (!this->isEmpty())
- {
- _head = (_head + 1) % _size;
- return 1;
- }
- return 0;
- }
- // Метод front для получения данных первого элемента очереди
- const int& Queue::front()
- {
- return _queue[_head];
- }
- // Оператор обмена очередей
- void Queue::swap(Queue & other)
- {
- std::swap(this->_queue, other._queue);
- std::swap(this->_head, other._head);
- std::swap(this->_tail, other._tail);
- std::swap(this->_size, other._size);
- }
- // Оператор присваивания
- Queue& Queue::operator=(Queue const& other)
- {
- if (this != &other)
- {
- Queue(other).swap(*this);
- }
- return *this;
- }
Add Comment
Please, Sign In to add comment