Popular Posts

Thursday, April 3, 2014

Priority queue C++ using linked list (sorted)

#include<iostream>
using namespace std;

struct node
{
    int data;
    node*next;

    node()
    {
        data=-1;
        next=NULL;
    }
    node(int n,node*temp)
    {
        data=n;
        next=temp;
    }
};
class queue
{
private:
    node*head;
    node*tail;

public:
    queue()
    {
        head=NULL;
        tail=NULL;
    }
bool enque(int data);
bool deque(int&data);
bool Isempty();
};
   
bool queue:: enque(int data)
    {
    node*temp=new node();

    if(temp==NULL) // if system memory is full return false
    {
        return false;
    }

    else // if system memory is not full then enque
    {

    if(head==NULL)
        {
           
            temp->data=data;
            temp->next=NULL;
            head=temp;
           
        }
        else if(head->next==NULL)
        {
            if(head->data<data)
            {
               
                temp->data=data;
                temp->next=head;
                head=temp;
            }
            else if(head->data>data)
            {
               
                temp->data=data;
                temp->next=NULL;
                temp->next=head->next;
                head->next=temp;
           
            }
        }

        else
        {
            node*current=head;
            if(head->data<data)
            {
               
                temp->data=data;
                temp->next=NULL;
                temp->next=head;
                head=temp;
               
            }
            else
            {
                while(current->next!=NULL)
                {
                    if(current->next->data<data)
                    {
                        break;
                    }
                    current=current->next;
                }
               
                temp->data=data;
                temp->next=current->next;
                current->next=temp;
            }
        }
        return true;
    }
}

bool queue:: deque(int&data)
    {
        node*current=head;
        if(current==NULL)
        {
            return false;
        }
        else
        {
            data=current->data;
            head=current->next;
            delete current;
            return true;
        }
    }

bool queue:: Isempty()
    {
        if(head==NULL)
        {
            return false;
        }
        else
        {
            return true;
        }
    }






void main()
{
    queue q;
    int option;
    int data;
    bool temp;
    while(1)
    {
        cout<<"Enter 1 to Enter data in queue"<<endl;
        cout<<"Enter 2 to Deque data in queue"<<endl;
        cout<<"Enter 3 to deque all elements"<<endl;
        cout<<"Enter 4 to clear screen"<<endl;

        cin>>option;

        switch(option)
        {
        case 1:
            cout<<"Enter data : ";
            cin>>data;
            if(q.enque(data))
            {
            cout<<"Succesfully enqueued"<<endl;
            }
            else
            {
                cout<<"system memory is full"<<endl;
            }
            break;
       
       
        case 2:
            if(q.Isempty())
            {
            temp=q.deque(data);
            cout<<"DEQUEUED DATA IS : "<<data<<endl;
            }
            else
            {
                cout<<"queue is Empty"<<endl;
            }
            break;
       
       
        case 3:
           
            if(q.Isempty())
            {
                while(q.Isempty())
            {
            temp=q.deque(data);
            cout<<"DEQUEUED DATA IS : "<<data<<endl;
            }
            }
            else
            {
                cout<<"queue is Empty"<<endl;
            }
            break;
       
        case 4:
            system("cls");
            break;

        case 5:
            cout<<"Invalid input "<<endl;
            break;



        }
   


        }

   

}

1 comment:

  1. Thanks for your appreciation. you can also follow me on facebook @ www.facebook.com/umerpervaiz12

    ReplyDelete