1-ShadowMaster-1

Untitled

Feb 17th, 2022
686
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include<bits/stdc++.h>
  4.  
  5. using namespace std;
  6.  
  7. template<class T>
  8. class ICircularBoundedQueue
  9. {
  10.         public:
  11.         virtual void offer(T value) = 0;
  12.         virtual T poll() = 0;
  13.         virtual T peek() = 0;
  14.         virtual void flush() = 0;
  15.         virtual bool isEmpty() const = 0;
  16.         virtual bool isFull() const = 0;
  17.         virtual int size() const = 0;
  18.         virtual int capacity() const = 0;
  19.         virtual ~ICircularBoundedQueue() = default;
  20. };
  21.  
  22. template <class T, int Capacity>
  23. class Queue : public ICircularBoundedQueue<T>{
  24.  
  25.         int a[Capacity];
  26.         int l = 0, r = -1;
  27. public:
  28.          void add(T &x, int val){
  29.                 x += val;
  30.                 x %= Capacity;
  31.                 x += Capacity;
  32.                 x %= Capacity;
  33.         }
  34.  
  35.         virtual void offer(T new_variable)override
  36.         {
  37.                 if(r != -1 && (r + 1) % Capacity == l){
  38.                         add(l, 1);
  39.                 }
  40.                 add(r, 1);
  41.                 a[r] = new_variable;
  42.         }
  43.  
  44.         virtual T poll()override
  45.         {
  46.                 if(r == -1){
  47.                         return -1;
  48.                 }
  49.                 int x = a[l];
  50.                 if(l == r){
  51.                         r = -1;
  52.                         l = 0;
  53.                 }else add(l, 1);
  54.                 return x;
  55.         }
  56.  
  57.         virtual T peek()override
  58.         {
  59.                 if(r == -1)return -1;
  60.                 return a[l];
  61.         }
  62.  
  63.         virtual void flush()override
  64.         {
  65.                 l = 0, r = -1;
  66.         }
  67.  
  68.         virtual bool isFull() const override
  69.         {
  70.                 return (r + 1) % Capacity == l;
  71.         }
  72.  
  73.         virtual bool isEmpty() const override
  74.         {
  75.                 return (r == -1);
  76.         }
  77.  
  78.         virtual int size() const override
  79.         {
  80.                 if(r == -1)return 0;
  81.                 if(l <= r)return r - l + 1;
  82.                 return Capacity - l + r + 1;
  83.         }
  84.  
  85.         virtual int capacity() const override
  86.         {
  87.                 return Capacity;
  88.         }
  89.  
  90. };
  91.  
Advertisement
Add Comment
Please, Sign In to add comment