Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include<bits/stdc++.h>
- using namespace std;
- template<class T>
- class ICircularBoundedQueue
- {
- public:
- virtual void offer(T value) = 0;
- virtual T poll() = 0;
- virtual T peek() = 0;
- virtual void flush() = 0;
- virtual bool isEmpty() const = 0;
- virtual bool isFull() const = 0;
- virtual int size() const = 0;
- virtual int capacity() const = 0;
- virtual ~ICircularBoundedQueue() = default;
- };
- template <class T, int Capacity>
- class Queue : public ICircularBoundedQueue<T>{
- int a[Capacity];
- int l = 0, r = -1;
- public:
- void add(T &x, int val){
- x += val;
- x %= Capacity;
- x += Capacity;
- x %= Capacity;
- }
- virtual void offer(T new_variable)override
- {
- if(r != -1 && (r + 1) % Capacity == l){
- add(l, 1);
- }
- add(r, 1);
- a[r] = new_variable;
- }
- virtual T poll()override
- {
- if(r == -1){
- return -1;
- }
- int x = a[l];
- if(l == r){
- r = -1;
- l = 0;
- }else add(l, 1);
- return x;
- }
- virtual T peek()override
- {
- if(r == -1)return -1;
- return a[l];
- }
- virtual void flush()override
- {
- l = 0, r = -1;
- }
- virtual bool isFull() const override
- {
- return (r + 1) % Capacity == l;
- }
- virtual bool isEmpty() const override
- {
- return (r == -1);
- }
- virtual int size() const override
- {
- if(r == -1)return 0;
- if(l <= r)return r - l + 1;
- return Capacity - l + r + 1;
- }
- virtual int capacity() const override
- {
- return Capacity;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment