Advertisement
Guest User

QueueOnArray

a guest
Mar 19th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include <assert.h>
  2. #include <iostream>
  3.  
  4. class Queue {
  5.  public:
  6.   explicit Queue(int size);
  7.   ~Queue();
  8.   void push_back(int value);
  9.   int pop_front();
  10.   bool IsEmpty() const;
  11.  private:
  12.   int* buffer_;
  13.   int buffer_size_;
  14.   int head_;
  15.   int tail_;
  16. };
  17. Queue::Queue(int size) : buffer_size_(size), head_(0), tail_(0) {
  18.   buffer_ = new int[buffer_size_];
  19. }
  20. Queue::~Queue() {
  21.   delete [] buffer_;
  22. }
  23. void Queue::push_back(int value) {
  24.   assert((tail_ + 1) % buffer_size_ != head_);
  25.   buffer_[tail_] = value;
  26.   tail_ = (tail_ + 1) % buffer_size_;
  27. }
  28. int Queue::pop_front() {
  29.   assert(head_ != tail_);
  30.   int temp_data = buffer_[head_];
  31.   head_ = (head_ + 1) % buffer_size_;
  32.   return temp_data;
  33. }
  34. bool Queue::IsEmpty() const {
  35.   return (tail_ == head_);
  36. }
  37. int main() {
  38.   int num = 0;
  39.   std::cin >> num;
  40.   Queue queue(num);
  41.   for (int i = 0; i < num; i++) {
  42.     int operation = 0;
  43.     int value = 0;
  44.     std::cin >> operation >> value;
  45.     switch (operation) {
  46.       case 3:
  47.         queue.push_back(value);
  48.         break;
  49.       case 2:
  50.       {
  51.         if ((queue.IsEmpty() && value != -1) ||
  52.             (!queue.IsEmpty() && queue.pop_front() != value)) {
  53.           std::cout << "NO" << std::endl;
  54.           return 0;
  55.         }
  56.         break;
  57.       }
  58.       default:
  59.         break;
  60.     }
  61.   }
  62.   std::cout << "YES" << std::endl;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement