Social Icons

Wednesday, 5 March 2014

Program for Various Operations on a Dequeue (Double Ended Queue)

What is Dequeue?

The word dequeue is short form of double ended queue. In a dequeue , insertion as well as deletion can be carried out either at the rear end or the front end.





Check it : - Program of Stack [Push, Pop and Display] 
Check it : - Program for Sorting an Array using Heap Sort 


 
Program Code:-

#include<stdio.h>
#include<process.h>
#include<conio.h>
#define MAX 10

typedef struct dequeue
{
    int data[MAX];
    int rear,front;
}dequeue;

void initialize(dequeue *p);
int empty(dequeue *p);
int full(dequeue *p);
void enqueueR(dequeue *p,int x);
int dequeueR(dequeue *p);
void enqueueF(dequeue *p,int x);
int dequeueF(dequeue *p);
void print(dequeue *p);

main()
{
clrscr();
{
    int i,x,op,n;
    dequeue q;
    initialize(&q);

    while(1)
    {
    printf("\n\n\n Press 1 for Create");
    printf("\n Press 2 for Insert at rear end");
    printf("\n Press 3 for Insert at front end");
    printf("\n Press 4 for Delete from rear end");
    printf("\n Press 5 for Delete from front end");
    printf("\n Press 6 to Print the Queue");
    printf("\n Press 7 to Exit");
    printf("\n\n\t Enter your choice : ");
    scanf("%d",&op);

    switch(op)
    {
        case 1:
        printf("\n How many elements you want to enter : ");
        scanf("%d",&n);
        initialize(&q);
        printf("\n Enter elements : ");

        for(i=0;i<n;i++)
        {
        scanf("%d",&x);
        if(full(&q))
        {
        printf("\n Queue is full...");
        break;
        }
        enqueueR(&q,x);
        }
        break;

        case 2:
        printf("\n Enter element to insert : ");
        scanf("%d",&x);

        if(full(&q))
        {
        printf("\n Queue is full...");
        break;
        }
        enqueueR(&q,x);
        break;

        case 3:
        printf("\n Enter element to insert : ");
        scanf("%d",&x);

        if(full(&q))
        {
        printf("\n Queue is full...");
        break;
        }
        enqueueF(&q,x);
        break;

        case 4:
        if(empty(&q))
        {
        printf("\n Queue is empty...");
        break;
        }
        x=dequeueR(&q);
        printf("\n Deleted element is : %d",x);
        break;

        case 5:
        if(empty(&q))
        {
        printf("\n Queue is empty...");
        break;
        }
        x=dequeueF(&q);
        printf("\n Deleted element is : %d",x);
        break;

        case 6:
        print(&q);
        break;

        case 7:
        exit(0);
        break;

        default:
        printf("\n\t Wrong choice...");
        break;
    }
    }
    }
    getch();
}

void initialize(dequeue *P)
{
    P->rear=-1;
    P->front=-1;
}

int empty(dequeue *P)
{
    if(P->rear==-1)
    return(1);
    return(0);
}

int full(dequeue *P)
{
    if((P->rear+1)%MAX==P->front)
    return(1);
    return(0);
}

void enqueueR(dequeue *P,int x)
{
    if(empty(P))
    {
    P->rear=0;
    P->front=0;
    P->data[0]=x;
    }
    else
    {
        P->rear=(P->rear+1)%MAX;
        P->data[P->rear]=x;
    }
}

void enqueueF(dequeue *P,int x)
{
    if(empty(P))
    {
    P->rear=0;
    P->front=0;
    P->data[0]=x;
    }
    else
    {
    P->front=(P->front-1+MAX)%MAX;
    P->data[P->front]=x;
    }
}

int dequeueF(dequeue *P)
{
    int x;
    x=P->data[P->front];
    if(P->rear==P->front)   //delete the last element
    initialize(P);
    else
    P->front=(P->front+1)%MAX;
    return(x);
}

int dequeueR(dequeue *P)
{
    int x;
    x=P->data[P->rear];
    if(P->rear==P->front)
    initialize(P);
    else
    P->rear=(P->rear-1+MAX)%MAX;
    return(x);
}

void print(dequeue *P)
{
    if(empty(P))
    {
    printf("\n Queue is empty...");
    }

    else
    {
    int i;
    i=P->front;
    while(i!=P->rear)
    {
    printf("\n %d ",P->data[i]);
    i=(i+1)%MAX;
    }
    printf("\n %d \n",P->data[P->rear]);
    }
}



                                                           Output

No comments:

Post a Comment