#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;
}
};
int main()
{
Queue q(10);
q.enqueue("apple");
q.enqueue("mango");
q.enqueue("red");
q.enqueue("green");
q.enqueue("blue");
q.enqueue("orange");
q.print();
cout<<q.getsize()<<endl;
q.dequeue();
q.print();
string s=q.getFront();
cout<<s<<endl;
cout<<q.getsize()<<endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBRdWV1ZQp7CiAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBzdHJpbmcgKmFycjsKICAgICAgICAgICAgICAgIGludCBmcm50LHJlYXI7CiAgICAgICAgICAgICAgICBpbnQgY2FwYWNpdHk7CiAgICAgICAgICAgICAgICBpbnQgc2l6ZT0wOwoKICAgICAgcHVibGljOgogICAgICAgICAgICAgUXVldWUoaW50IGNhcCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICBjYXBhY2l0eT1jYXA7CiAgICAgICAgICAgICAgICAgICAgICAgZnJudD0tMTsKICAgICAgICAgICAgICAgICAgICAgICByZWFyPS0xOwogICAgICAgICAgICAgICAgICAgICAgIGFycj1uZXcgc3RyaW5nW2NhcGFjaXR5XSA7CiAgICAgICAgICAgICB9CgogICAgICAgICAgICAgdm9pZCBlbnF1ZXVlKHN0cmluZyB2YWwpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZihpc2Z1bGwoKSkKICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0PDwgInF1ZXVlIGlzIGZ1bGwiPDxlbmRsOwoKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgIHJlYXI9KHJlYXIrMSklY2FwYWNpdHk7CiAgICAgICAgICAgICAgICAgICAgICBhcnJbcmVhcl09dmFsOwogICAgICAgICAgICAgICAgICAgICAgaWYoZnJudD09LTEpIGZybnQ9MDsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHNpemUrKzsKICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICB2b2lkIGRlcXVldWUoKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiggaXNlbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8ICJxdWV1ZSBpcyBlbXB0eSI8PGVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZybnQ9KGZybnQrMSklY2FwYWNpdHk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvb2wgaXNmdWxsKCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICBpZihzaXplPT1jYXBhY2l0eSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CgoKICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICBib29sIGlzZW1wdHkoKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIGlmKHNpemU9PTApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICBzdHJpbmcgZ2V0RnJvbnQoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyW2ZybnRdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGludCBnZXRzaXplKCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpemU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgdm9pZCBwcmludCgpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzZW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0PDwgInF1ZXVlIGlzIGVtcHR5Ijw8ZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBqPWZybnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGk9MDtpPHNpemU7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQ8PCBhcnJbal08PCAiICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaj0oaisxKSVjYXBhY2l0eTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQ8PGVuZGw7CiAgICAgICAgICAgICAgICAgIH0KfTsKCmludCBtYWluKCkKewogICAgICAgIFF1ZXVlIHEoMTApOwogICAgICAgcS5lbnF1ZXVlKCJhcHBsZSIpOwogICAgICAgcS5lbnF1ZXVlKCJtYW5nbyIpOwogICAgICAgcS5lbnF1ZXVlKCJyZWQiKTsKICAgICAgIHEuZW5xdWV1ZSgiZ3JlZW4iKTsKICAgICAgIHEuZW5xdWV1ZSgiYmx1ZSIpOwogICAgICAgcS5lbnF1ZXVlKCJvcmFuZ2UiKTsKICAgICAgIHEucHJpbnQoKTsKCiAgICAgICAgY291dDw8cS5nZXRzaXplKCk8PGVuZGw7CiAgICAgICBxLmRlcXVldWUoKTsKICAgICAgIHEucHJpbnQoKTsKICAgICAgIHN0cmluZyBzPXEuZ2V0RnJvbnQoKTsKICAgICAgIGNvdXQ8PHM8PGVuZGw7CgogICAgICAgY291dDw8cS5nZXRzaXplKCk8PGVuZGw7CiAgICByZXR1cm4gMDsKfQo=