#include<iostream>
using namespace std;
class Queue
{
private:
string *arr;
int frnt,rear;
int capacity;
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;
}
rear=rear+1;
arr[rear]=val;
if(frnt==-1) frnt=0;
}
void dequeue()
{
if( isempty())
{
cout<< "queue is empty"<<endl;
}
frnt=frnt+1;
}
bool isfull()
{
if(rear==capacity-1)
return true;
else
return false;
}
bool isempty()
{
if((rear==-1 && frnt==-1) || frnt>rear)
return true;
else
return false;
}
string getFront()
{
return arr[frnt];
}
int getsize()
{
return rear-frnt+1;
}
void print()
{
if(isempty())
{
cout<< "queue is empty"<<endl;
}
for(int i=frnt;i<=rear;i++)
{
cout<<arr[i]<< " "<<endl;
}
}
};
int main()
{
Queue q(10);
q.enqueue("apple");
q.enqueue("mango");
q.enqueue("red");
q.print();
q.dequeue();
q.print();
string s=q.getFront();
cout<<s<<endl;
int sz=q.getsize();
cout<<sz<<endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBRdWV1ZQp7CiAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBzdHJpbmcgKmFycjsKICAgICAgICAgICAgICAgIGludCBmcm50LHJlYXI7CiAgICAgICAgICAgICAgICBpbnQgY2FwYWNpdHk7CgogICAgICBwdWJsaWM6CiAgICAgICAgICAgICBRdWV1ZShpbnQgY2FwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIGNhcGFjaXR5PWNhcDsKICAgICAgICAgICAgICAgICAgICAgICBmcm50PS0xOwogICAgICAgICAgICAgICAgICAgICAgIHJlYXI9LTE7CiAgICAgICAgICAgICAgICAgICAgICAgYXJyPW5ldyBzdHJpbmdbY2FwYWNpdHldIDsKICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICB2b2lkIGVucXVldWUoc3RyaW5nIHZhbCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmKGlzZnVsbCgpKQogICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQ8PCAicXVldWUgaXMgZnVsbCI8PGVuZGw7CgogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgcmVhcj1yZWFyKzE7CiAgICAgICAgICAgICAgICAgICAgICBhcnJbcmVhcl09dmFsOwogICAgICAgICAgICAgICAgICAgICAgaWYoZnJudD09LTEpIGZybnQ9MDsKICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICB2b2lkIGRlcXVldWUoKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiggaXNlbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8ICJxdWV1ZSBpcyBlbXB0eSI8PGVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZybnQ9ZnJudCsxOwoKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvb2wgaXNmdWxsKCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICBpZihyZWFyPT1jYXBhY2l0eS0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCgogICAgICAgICAgICAgfQoKICAgICAgICAgICAgIGJvb2wgaXNlbXB0eSgpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJlYXI9PS0xICYmIGZybnQ9PS0xKSB8fCBmcm50PnJlYXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICBzdHJpbmcgZ2V0RnJvbnQoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyW2ZybnRdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGludCBnZXRzaXplKCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYXItZnJudCsxOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHZvaWQgcHJpbnQoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpc2VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8ICJxdWV1ZSBpcyBlbXB0eSI8PGVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGk9ZnJudDtpPD1yZWFyO2krKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0PDxhcnJbaV08PCAiICI8PGVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KfTsKCmludCBtYWluKCkKewogICAgICAgIFF1ZXVlIHEoMTApOwogICAgICAgcS5lbnF1ZXVlKCJhcHBsZSIpOwogICAgICAgcS5lbnF1ZXVlKCJtYW5nbyIpOwogICAgICAgcS5lbnF1ZXVlKCJyZWQiKTsKICAgICAgIHEucHJpbnQoKTsKICAgICAgIHEuZGVxdWV1ZSgpOwogICAgICAgcS5wcmludCgpOwogICAgICAgc3RyaW5nIHM9cS5nZXRGcm9udCgpOwogICAgICAgY291dDw8czw8ZW5kbDsKICAgICAgIGludCBzej1xLmdldHNpemUoKTsKICAgICAgIGNvdXQ8PHN6PDxlbmRsOwogICAgcmV0dXJuIDA7Cn0K