Design and implement a Queue data structure using linked lis
Solution
PROGRAM CODE:
/*
 * Queue.cpp
 *
 * Created on: 17-Nov-2016
 * Author: kasturi
 */
 #include<iostream>
 #include<cstdlib>
 #define MAX_SIZE 10
 using namespace std;
class Queue{
    private:
        int item[MAX_SIZE];
        int rear;
        int front;
    public:
        Queue();
 Queue( Queue &q);
 ~Queue();
        void enqueue(int);
        int dequeue();
        void display();
        bool is_empty();
        bool is_full();
 int size();
 Queue operator+(Queue &q1);
 };
       Queue::Queue(){
            rear = -1;
            front = 0;
        }
        int Queue::size(){
            return (rear - front + 1);
        }
        Queue::Queue( Queue &q){
            rear = q.rear;
            front = q.front;
            for(int i=0; i<q.size(); i++)
            {
                item[i] = q.item[i];
            }
        }
       Queue Queue::operator+( Queue &q1)
        {
            Queue q3;
            for(int i=this->front; i<=this->rear; i++)
            {
                q3.item[++rear] = this->item[i];
            }
            for(int i=q1.front; i<=q1.rear; i++)
            {
                q3.item[++rear] = q1.item[i];
            }
            return q3;
        }
        Queue::~Queue(){
            delete this;
    }
    void Queue::enqueue(int data){
        item[++rear] = data;
    }
    int Queue::dequeue(){
        return item[front++];
    }
    void Queue::display(){
        if(!this->is_empty()){
        for(int i=front; i<=rear; i++)
        cout<<item[i]<<\" \";
        }else{
        cout<<\"Queue is Underflow\"<<\" \";
        }
        cout<<endl;
    }
    bool Queue::is_empty(){
    if(front>rear){
        return true;
        }else{
        return false;
        }
    }
    bool Queue::is_full(){
        if(this->size()>=MAX_SIZE){
        return true;
        }else{
        return false;
        }
    }
    int main(){
        Queue queue, q3, q2;
        int choice, data;
        char contChoice = \'Y\';
        while(contChoice == \'Y\' || contChoice == \'y\'){
            cout<<\"\ 1. Enqueue\ 2. Dequeue\ 3. Is Full?\ 4. Is empty?\ 5. Display all elements\ 6. Add two Queues\ 7. Quit\";
            cout<<\"\ Enter your choice: \";
            cin>>choice;
            switch(choice){
            case 1:
                if(!queue.is_full()){
                cout<<\"\ Enter data: \";
                cin>>data;
                queue.enqueue(data);
                }else{
                cout<<\"Queue is Full\"<<endl;
                }
                break;
            case 2:
                if(!queue.is_empty()){
                    cout<<\"The data dequeued is :\"<<queue.dequeue();
                }else{
                    cout<<\"Queue is Empty\"<<endl;
                }
                break;
            case 3:
                queue.is_full() == 0? cout<<\"false\" : cout<<\"true\";
                break;
        case 4:
            queue.is_empty()== 0? cout<<\"false\" : cout<<\"true\";
            break;
            case 5:
                queue.display();
                break;
            case 6:
                    q2.enqueue(1);
                    q2.enqueue(2);
                    cout<<\"Queue1: \";
                    queue.display();
                    cout<<\"Queue2: \";
                    q2.display();
                    cout<<\"New Queue: \";
                    q3 = queue + q2;
                    q3.display();
                    break;
            case 7:
                exit(0);
                break;
            }
            cout<<endl<<\"Do you want to continue? Y or N \ \";
            cin>>contChoice;
        }
        return 0;
    }
OUTPUT:
1. Enqueue
2. Dequeue
3. Is Full?
4. Is empty?
5. Display all elements
6. Add two Queues
7. Quit
Enter your choice: 1
Enter data: 34
Do you want to continue? Y or N
y
1. Enqueue
2. Dequeue
3. Is Full?
4. Is empty?
5. Display all elements
6. Add two Queues
7. Quit
Enter your choice: 1
Enter data: 35
Do you want to continue? Y or N
y
1. Enqueue
2. Dequeue
3. Is Full?
4. Is empty?
5. Display all elements
6. Add two Queues
7. Quit
Enter your choice: 5
34 35
Do you want to continue? Y or N
n




