#include<iostream>
using namespace std;
class Queue
{
private:
string *arr;
int frnt,rear;
int capacity;
int size=0;
public:
Queue(int cap)
{
capacity=cap;
frnt=-1;
rear=-1;
arr=new string[capacity] ;
}
void enqueue(string val)
{
if(isfull())
{
cout<< "queue is full"<<endl;
}
else{
rear=(rear+1)%capacity;
arr[rear]=val;
if(frnt==-1) frnt=0;
}
size++;
}
void dequeue()
{
if( isempty())
{
cout<< "queue is empty"<<endl;
}
else{
frnt=(frnt+1)%capacity;
size--;
}
}
bool isfull()
{
if(size==capacity)
return true;
else
return false;
}
bool isempty()
{
if(size==0)
return true;
else
return false;
}
string getFront()
{
return arr[frnt];
}
int getsize()
{
return size;
}
void print()
{
if(isempty())
{
cout<< "queue is empty"<<endl;
}
int j=frnt;
for(int i=0;i<size;i++)
{
cout<< arr[j]<< " ";
j=(j+1)%capacity;
}
cout<<endl;
}
void enqfront(string val)
{
if(isfull()) cout<< "overflow"<<endl;
else if(frnt==-1)
{
frnt++;
rear++;
}
else if(frnt==0) frnt=capacity-1;
else frnt--;
arr[frnt]=val;
size++;
}
void dqrear()
{
if(isempty())
{
cout<< "underflow"<<endl;
}
else if(rear==0) rear=capacity-1;
else rear--;
size--;
}
};
int main()
{
Queue q(10);
q.enqfront("violet");
q.enqueue("apple");
q.enqueue("mango");
q.enqueue("red");
q.enqueue("green");
q.enqueue("blue");
q.enqueue("orange");
q.enqfront("violet");
q.print();
cout<<q.getsize()<<endl;
q.dequeue();
q.dequeue();
q.dequeue();
q.print();
q.dqrear();
q.print();
string s=q.getFront();
cout<<s<<endl;
cout<<q.getsize()<<endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBRdWV1ZQp7CiAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBzdHJpbmcgKmFycjsKICAgICAgICAgICAgICAgIGludCBmcm50LHJlYXI7CiAgICAgICAgICAgICAgICBpbnQgY2FwYWNpdHk7CiAgICAgICAgICAgICAgICBpbnQgc2l6ZT0wOwoKICAgICAgcHVibGljOgogICAgICAgICAgICAgUXVldWUoaW50IGNhcCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICBjYXBhY2l0eT1jYXA7CiAgICAgICAgICAgICAgICAgICAgICAgZnJudD0tMTsKICAgICAgICAgICAgICAgICAgICAgICByZWFyPS0xOwogICAgICAgICAgICAgICAgICAgICAgIGFycj1uZXcgc3RyaW5nW2NhcGFjaXR5XSA7CiAgICAgICAgICAgICB9CgogICAgICAgICAgICAgdm9pZCBlbnF1ZXVlKHN0cmluZyB2YWwpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZihpc2Z1bGwoKSkKICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0PDwgInF1ZXVlIGlzIGZ1bGwiPDxlbmRsOwoKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgIHJlYXI9KHJlYXIrMSklY2FwYWNpdHk7CiAgICAgICAgICAgICAgICAgICAgICBhcnJbcmVhcl09dmFsOwogICAgICAgICAgICAgICAgICAgICAgaWYoZnJudD09LTEpIGZybnQ9MDsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHNpemUrKzsKICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICB2b2lkIGRlcXVldWUoKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiggaXNlbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8ICJxdWV1ZSBpcyBlbXB0eSI8PGVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZybnQ9KGZybnQrMSklY2FwYWNpdHk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvb2wgaXNmdWxsKCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICBpZihzaXplPT1jYXBhY2l0eSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CgoKICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICBib29sIGlzZW1wdHkoKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIGlmKHNpemU9PTApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICBzdHJpbmcgZ2V0RnJvbnQoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyW2ZybnRdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGludCBnZXRzaXplKCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpemU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgdm9pZCBwcmludCgpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzZW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0PDwgInF1ZXVlIGlzIGVtcHR5Ijw8ZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBqPWZybnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGk9MDtpPHNpemU7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQ8PCBhcnJbal08PCAiICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaj0oaisxKSVjYXBhY2l0eTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQ8PGVuZGw7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgIHZvaWQgZW5xZnJvbnQoc3RyaW5nIHZhbCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNmdWxsKCkpIGNvdXQ8PCAib3ZlcmZsb3ciPDxlbmRsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihmcm50PT0tMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoZnJudD09MCkgZnJudD1jYXBhY2l0eS0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBmcm50LS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJbZnJudF09dmFsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSsrOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICB2b2lkIGRxcmVhcigpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzZW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0PDwgInVuZGVyZmxvdyI8PGVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHJlYXI9PTApIHJlYXI9Y2FwYWNpdHktMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcmVhci0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0tOwoKICAgICAgICAgICAgICAgICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICAgICAgUXVldWUgcSgxMCk7CiAgICAgICAgcS5lbnFmcm9udCgidmlvbGV0Iik7CiAgICAgICBxLmVucXVldWUoImFwcGxlIik7CiAgICAgICBxLmVucXVldWUoIm1hbmdvIik7CiAgICAgICBxLmVucXVldWUoInJlZCIpOwoKICAgICAgIHEuZW5xdWV1ZSgiZ3JlZW4iKTsKICAgICAgIHEuZW5xdWV1ZSgiYmx1ZSIpOwogICAgICAgcS5lbnF1ZXVlKCJvcmFuZ2UiKTsKICAgICAgICBxLmVucWZyb250KCJ2aW9sZXQiKTsKICAgICAgIHEucHJpbnQoKTsKCiAgICAgICAgY291dDw8cS5nZXRzaXplKCk8PGVuZGw7CiAgICAgICBxLmRlcXVldWUoKTsKICAgICAgIHEuZGVxdWV1ZSgpOwogICAgICAgcS5kZXF1ZXVlKCk7CgoKICAgICAgIHEucHJpbnQoKTsKICAgICAgIHEuZHFyZWFyKCk7CiAgICAgICBxLnByaW50KCk7CiAgICAgICBzdHJpbmcgcz1xLmdldEZyb250KCk7CiAgICAgICBjb3V0PDxzPDxlbmRsOwoKICAgICAgIGNvdXQ8PHEuZ2V0c2l6ZSgpPDxlbmRsOwogICAgcmV0dXJuIDA7Cn0=