Bonus Practice Sheet Winter 2018 [17-Mar-2018 to 7-Apr-2018]
Program ID-
Design a generic class queue to maintain a list of elements. Queue is a linear data structure that follow FIFO ordering of elements. It is a special kind of list where elements can be inserted at one end and deleted at the end. There are two end points called front and rear. Front is the point of deletion and that move for each deletion but always points to the element that was inserted first among the elements remaining in the queue. Rear is the point of the insertion and move for each insertion but always points to the element that was inserted last among the elements remaining in the queue. Provide member functions to check if a queue is empty, queue is full, enqueue and dequeue.
Code: C++
#include<iostream>
#include<string>
using namespace std;
bool ERR_Flag = false;
template<class T>
class queue
{
protected:
int front;
int rear;
int capacity;
T *ele;
public:
queue();
bool isempty();
bool isfull();
bool enqueue(T data);
T dequeue();
~queue();
void print();
};
template<class T>
class deque:public queue<T>
{
public:
bool push_Back(T data);
bool push_Front(T data);
T pop_Front();
T pop_Back();
};
//start
template<class T> queue<T>::queue() {
front=-1;
rear=-1;
capacity=20;
ele=new T[20];
}
template<class T> bool queue<T>::isempty() {
if(front==-1)
return true;
else
return false;
}
template<class T> bool queue<T>::isfull() {
if(rear==19)
return true;
else
return false;
}
template<class T> bool queue<T>::enqueue(T data) {
if(isfull())
return false;
else {
ele[++rear]=data;
if(!rear)
front++;
return true;
}
}
template<class T> T queue<T>::dequeue() {
if(isempty()) {
ERR_Flag=true;
return ele[0];
}
else {
int i=front;
if(front+1>rear) {
rear=-1;
front=-1;
}
else
front++;
return ele[i];
}
}
template<class T> void queue<T>::print() {
if(!isempty()) {
for(int i=front; i<=rear; i++)
cout<<ele[i]<<endl;
}
else
cout<<"Queue is empty"<<endl;
}
template<class T> queue<T>::~queue() {}
template<class T> bool deque<T>::push_Back(T data) {
return queue<T>::enqueue(data);
}
template<class T> bool deque<T>::push_Front(T data) {
if(!queue<T>::isfull()) {
if(queue<T>::isempty()) {
queue<T>::enqueue(data);
}
else {
for(int i=queue<T>::rear++; i>=queue<T>::front; i--)
queue<T>::ele[i+1]=queue<T>::ele[i];
queue<T>::ele[queue<T>::front]=data;
return true;
}
}
return false;
}
template<class T> T deque<T>::pop_Front() {
return queue<T>::dequeue();
}
template<class T> T deque<T>::pop_Back() {
if(!queue<T>::isempty()) {
if((queue<T>::rear)-1>=(queue<T>::front))
return queue<T>::ele[queue<T>::rear--];
}
else
return queue<T>::ele[0];
}
int main()
{
int d_Choice;
int op_Choice;
deque<string> d;
queue<int> q;
cin>>d_Choice;
if(d_Choice==1)
{
while(1)
{
cin>>op_Choice;
if(op_Choice==1)
{
if(q.isempty())
cout<<"Queue is empty"<<endl;
else
cout<<"Queue is not empty"<<endl;
}
else if(op_Choice==2)
{
if(q.isfull())
cout<<"Queue is full"<<endl;
else
cout<<"Queue is not full"<<endl;
}
else if(op_Choice==3) {
int data;
cin>>data;
if(!q.enqueue(data))
cout<<"Queue full insertion not possible";
}
else if(op_Choice==4)
{
q.dequeue();
if(ERR_Flag)
cout<<"Queue is empty";
}
else if(op_Choice==5)
{
q.print();
}
else if(op_Choice==6)
break;
}
}
else if(d_Choice==2) {
string s_Data;
while(1)
{
cin>>op_Choice;
if(op_Choice==1)
{
if(d.isempty())
cout<<"Queue is empty"<<endl;
else
cout<<"Queue is not empty"<<endl;
}
else if(op_Choice==2)
{
if(d.isfull())
cout<<"Queue is full"<<endl;
else
cout<<"Queue is not full"<<endl;
}
else if(op_Choice==3)
{
cin>>s_Data;
if(!d.push_Back(s_Data))
cout<<"Queue full insertion not possible";
}
else if(op_Choice==4)
{
cin>>s_Data;
if(!d.push_Front(s_Data))
cout<<"Queue full insertion not possible";
}
else if(op_Choice==5)
{
d.pop_Back();
if(ERR_Flag)
cout<<"Queue is empty";
}
else if(op_Choice==6)
{
d.pop_Front();
if(ERR_Flag)
cout<<"Queue is empty";
}
else if(op_Choice==7)
d.print();
else if(op_Choice==8)
{
break;
}
}
}
}
#include<string>
using namespace std;
bool ERR_Flag = false;
template<class T>
class queue
{
protected:
int front;
int rear;
int capacity;
T *ele;
public:
queue();
bool isempty();
bool isfull();
bool enqueue(T data);
T dequeue();
~queue();
void print();
};
template<class T>
class deque:public queue<T>
{
public:
bool push_Back(T data);
bool push_Front(T data);
T pop_Front();
T pop_Back();
};
//start
template<class T> queue<T>::queue() {
front=-1;
rear=-1;
capacity=20;
ele=new T[20];
}
template<class T> bool queue<T>::isempty() {
if(front==-1)
return true;
else
return false;
}
template<class T> bool queue<T>::isfull() {
if(rear==19)
return true;
else
return false;
}
template<class T> bool queue<T>::enqueue(T data) {
if(isfull())
return false;
else {
ele[++rear]=data;
if(!rear)
front++;
return true;
}
}
template<class T> T queue<T>::dequeue() {
if(isempty()) {
ERR_Flag=true;
return ele[0];
}
else {
int i=front;
if(front+1>rear) {
rear=-1;
front=-1;
}
else
front++;
return ele[i];
}
}
template<class T> void queue<T>::print() {
if(!isempty()) {
for(int i=front; i<=rear; i++)
cout<<ele[i]<<endl;
}
else
cout<<"Queue is empty"<<endl;
}
template<class T> queue<T>::~queue() {}
template<class T> bool deque<T>::push_Back(T data) {
return queue<T>::enqueue(data);
}
template<class T> bool deque<T>::push_Front(T data) {
if(!queue<T>::isfull()) {
if(queue<T>::isempty()) {
queue<T>::enqueue(data);
}
else {
for(int i=queue<T>::rear++; i>=queue<T>::front; i--)
queue<T>::ele[i+1]=queue<T>::ele[i];
queue<T>::ele[queue<T>::front]=data;
return true;
}
}
return false;
}
template<class T> T deque<T>::pop_Front() {
return queue<T>::dequeue();
}
template<class T> T deque<T>::pop_Back() {
if(!queue<T>::isempty()) {
if((queue<T>::rear)-1>=(queue<T>::front))
return queue<T>::ele[queue<T>::rear--];
}
else
return queue<T>::ele[0];
}
int main()
{
int d_Choice;
int op_Choice;
deque<string> d;
queue<int> q;
cin>>d_Choice;
if(d_Choice==1)
{
while(1)
{
cin>>op_Choice;
if(op_Choice==1)
{
if(q.isempty())
cout<<"Queue is empty"<<endl;
else
cout<<"Queue is not empty"<<endl;
}
else if(op_Choice==2)
{
if(q.isfull())
cout<<"Queue is full"<<endl;
else
cout<<"Queue is not full"<<endl;
}
else if(op_Choice==3) {
int data;
cin>>data;
if(!q.enqueue(data))
cout<<"Queue full insertion not possible";
}
else if(op_Choice==4)
{
q.dequeue();
if(ERR_Flag)
cout<<"Queue is empty";
}
else if(op_Choice==5)
{
q.print();
}
else if(op_Choice==6)
break;
}
}
else if(d_Choice==2) {
string s_Data;
while(1)
{
cin>>op_Choice;
if(op_Choice==1)
{
if(d.isempty())
cout<<"Queue is empty"<<endl;
else
cout<<"Queue is not empty"<<endl;
}
else if(op_Choice==2)
{
if(d.isfull())
cout<<"Queue is full"<<endl;
else
cout<<"Queue is not full"<<endl;
}
else if(op_Choice==3)
{
cin>>s_Data;
if(!d.push_Back(s_Data))
cout<<"Queue full insertion not possible";
}
else if(op_Choice==4)
{
cin>>s_Data;
if(!d.push_Front(s_Data))
cout<<"Queue full insertion not possible";
}
else if(op_Choice==5)
{
d.pop_Back();
if(ERR_Flag)
cout<<"Queue is empty";
}
else if(op_Choice==6)
{
d.pop_Front();
if(ERR_Flag)
cout<<"Queue is empty";
}
else if(op_Choice==7)
d.print();
else if(op_Choice==8)
{
break;
}
}
}
}
NOTE: The Above Codes are for reference only. It doesn't mean everyone to directly copy/paste those codes.
No comments:
Post a Comment