Deque or Double Ended Queue | Data Structure

 


Deque or Double Ended Queue:

In Deque or Double Ended Queue insertion and deletion takes place from any end of queue. We can insert or delete from rare (R) end and also from front (F) end.




Procedure for Inserting Element into Doubly Ended Queue:

void insert_dbq(int x)

{

    int ch;

    printf("Enter Choice: 1-Rare  2-Front:");

    scanf("%d",&ch); 

    if(R==-1) // check queue is empty than F=0 & R=0

    {

        F=0;

        R=0;

        queue[R]=x;  

        printf("Elements of queue are:");

        for(int i=0;i<=size-1;i++)

        {

        printf("|%d|",queue[i]);

        }

    } 

    else

    {

        switch(ch)

        {

            case 1:

            if(R==size-1)

            {

                if(F==0)

                {

                    printf("Queue is Full\n");

                }

                else

                {

                    R=0;

                    queue[R]=x;

                }

            }

            else

            {

                if(R+1==F)

                {

                    printf("Queue is Full\n");

                }

                else

                {

                    R++;

                    queue[R]=x;

                }

            }

            printf("Element of queue form Rare:");

            for(int i=0;i<=size-1;i++)

                 {

                     printf("|%d|",queue[i]);

                 }

            break;

            case 2:

            if(F==0)

            {

                if(R==size-1)

                {

                    printf("Queue is Full\n");

                }

                else

                {

                    F=size-1;

                    queue[F]=x;

                }

            }

            else

            {

                if(F-1==R)

                {

                    printf("Queue is Full\n");

                }

                else

                {

                    F--;

                    queue[F]=x;

                }

            }

            printf("Element of queue form front:");

            for(int i=0;i<=size-1;i++)

                 {

                     printf("|%d|",queue[i]);

                 }

            break;            

            default :

            printf("Invalid Choice");

        }

    }

}

Procedure for Deleting Element into Doubly Ended Queue:

int delete_dbq()

{

    int x,ch;

    printf("Enter choice 1-Front  2-Rare:");

    scanf("%d",&ch);

    if(F==-1)

    {

        printf("Queue is Empty\n");

    }

    else

    {

        if(F==R)

        {

            x=queue[F];

            queue[F]=0;

            F=-1;

            R=-1;         

            printf("Elements of queue are:");

            for(int i=0;i<=size-1;i++)

            {

            printf("|%d|",queue[i]);

            }

        }        

        else

        {

            switch(ch)

            {

                case 1:

                x=queue[F];

                queue[F]=0;

                F++;

                if(F==size)

                {

                    F=0;

                }

                printf("Elements of queue are:");

                for(int i=0;i<=size-1;i++)

                {

                    printf("|%d|",queue[i]);

                }

                break;             

                case 2:

                x=queue[R];

                queue[R]=0;

                R--;

                if(R==-1)

                {

                    R=size-1;

                }

                printf("Elements of queue are:");

                for(int i=0;i<=size-1;i++)

                {

                    printf("|%d|",queue[i]);

                }

                break;              

                default:

                printf("Invalid Choice");

            }

        }

    }

    return(x);

}

Complete Program for Inserting & Deleting Element into Doubly Ended Queue:

#include <stdio.h>

#include <conio.h>

#define size 10


int queue[size];

int R=-1,F=-1;


void insert_dbq(int x)

{

    int ch;

    printf("Enter Choice: 1-Rare  2-Front:");

    scanf("%d",&ch); 

    if(R==-1)// check queue is empty than F=0 & R=0

    {

        F=0;

        R=0;

        queue[R]=x;  

        printf("Elements of queue are:");

        for(int i=0;i<=size-1;i++)

        {

        printf("|%d|",queue[i]);

        }

    } 

    else

    {

        switch(ch)

        {

            case 1:

            if(R==size-1)

            {

                if(F==0)

                {

                    printf("Queue is Full\n");

                }

                else

                {

                    R=0;

                    queue[R]=x;

                }

            }

            else

            {

                if(R+1==F)

                {

                    printf("Queue is Full\n");

                }

                else

                {

                    R++;

                    queue[R]=x;

                }

            }

            printf("Element of queue form Rare:");

            for(int i=0;i<=size-1;i++)

                 {

                     printf("|%d|",queue[i]);

                 }

            break;

            case 2:

            if(F==0)

            {

                if(R==size-1)

                {

                    printf("Queue is Full\n");

                }

                else

                {

                    F=size-1;

                    queue[F]=x;

                }

            }

            else

            {

                if(F-1==R)

                {

                    printf("Queue is Full\n");

                }

                else

                {

                    F--;

                    queue[F]=x;

                }

            }

            printf("Element of queue form front:");

            for(int i=0;i<=size-1;i++)

                 {

                     printf("|%d|",queue[i]);

                 }

            break;            

            default :

            printf("Invalid Choice");

        }

    }

}


int delete_dbq()

{

    int x,ch;

    printf("Enter choice 1-Front  2-Rare:");

    scanf("%d",&ch);

    if(F==-1)

    {

        printf("Queue is Empty\n");

    }

    else

    {

        if(F==R)

        {

            x=queue[F];

            queue[F]=0;

            F=-1;

            R=-1;         

            printf("Elements of queue are:");

            for(int i=0;i<=size-1;i++)

            {

            printf("|%d|",queue[i]);

            }

        }        

        else

        {

            switch(ch)

            {

                case 1:

                x=queue[F];

                queue[F]=0;

                F++;

                if(F==size)

                {

                    F=0;

                }

                printf("Elements of queue are:");

                for(int i=0;i<=size-1;i++)

                {

                    printf("|%d|",queue[i]);

                }

                break;             

                case 2:

                x=queue[R];

                queue[R]=0;

                R--;

                if(R==-1)

                {

                    R=size-1;

                }

                printf("Elements of queue are:");

                for(int i=0;i<=size-1;i++)

                {

                    printf("|%d|",queue[i]);

                }

                break;              

                default:

                printf("Invalid Choice");

            }

        }

    }

    return(x);

}


void main()

{

   int x,cho=1;

   do{  

   printf("Do you want to insert element in Doubly Queue:0-Exit, 1-Insert, 2-Delete:");   

   scanf("%d",&cho);

    if(cho==1)

   {

       printf("Enter Element of Doubly Queue:");

       scanf("%d",&x);

       insert_dbq(x);

       printf("\n");

   }

   if(cho==2)

   {

       int d=delete_dbq();

       printf("\n%d is deleted element\n",d);

       printf("\n");

   }

   }while(cho!=0);

   getch();

}

Out Put:



No comments:

Post a Comment