Showing posts with label Queue. Show all posts
Showing posts with label Queue. Show all posts

Tuesday, July 19, 2011

Implementation of Queue using two stacks using pointers {enqueue, dequeue, display}

/*Serial No.154     [swami136.cpp]*/

#include<stdio.h>
#include<conio.h>
#define max 4
int tos1=-1,tos2=-1;
int stack1[max],stack2[max];

void push(int *S,int ele, int *top)
    {
    if(*top<max-1)
        {
        (*top)++;
        *(S+*top)=ele;
        }
    else
        printf("\nStack is full.\n");
    }

int pop(int *S, int *top)
    {
    int value=*(S+*top);
    (*top)--;
    return(value);
    }
void display(int *S, int top)
    {
    printf("\nElements in the Queue are:\n");
    if(top==-1)
        printf("\nStack is empty.\n");
    else
        {
        for(int i=0;i<=top;i++)
            {
            printf("%d ",*(S+i));
            }
        }
    }

void main()
{
int choice,ele,temp;
clrscr();
    printf("\n\t[1] Enqueue");
    printf("\n\t[2] Dequeue");
    printf("\n\t[3] Display");
    printf("\n\t[7] Exit");

do
    {
    printf("\nEnter your choice= ");
    scanf("%d",&choice);

    switch(choice)
        {
        case 1: if(tos1>=max-1)
                printf("\nQueue is full.\n");
            else
                {
                printf("Enter the element to insert= ");
                scanf("%d",&ele);
                push(stack1,ele,&tos1);
                }
            break;
        case 2: if(tos1==-1)
                printf("\nQueue is Empty.You can't dequeue.\n");
            else
                {
                while(tos1!=0)
                    {
                    ele=pop(stack1,&tos1);
                    push(stack2,ele,&tos2);
                    }
                ele=pop(stack1,&tos1);
                printf("\nDeleted Element from Queue= %d",ele);
                while(tos2!=-1)
                    {
                    ele=pop(stack2,&tos2);
                    push(stack1,ele,&tos1);
                    }
                }
            break;
        case 3: display(stack1,tos1);
        }
    }while(choice!=7);
getch();
}

Program for Linear Queue using pointers {enqueue, dequeue, display}

/*Serial No.150     [swami132.cpp]*/

#include<stdio.h>
#include<conio.h>
#define maxsize 4
void enqueue(int *Q,int *f, int *r)
    {
    int ele;
    if(*r>=maxsize-1)
        {
        printf("\nQueue is full. Value can't be added.");
        return;
        }
    if(*f==-1)
        {
        (*f)++;
        }
    (*r)++;
    printf("\nEntere the element to insert= ");
    scanf("%d",&ele);
    *(Q+*r)=ele;
    }

void display(int *Q,int f,int r)
    {
    if(f==-1&&r==-1)
        printf("\nQueue is empty.");
    else
        {
        printf("\nElements in Queue are:\n");
        for(int i=f;i<=r;i++)
            {
            printf("%d ",*(Q+i));
            }
        }
    }

void dequeue(int *Q,int *f, int *r)
    {
    int ele;
    if(*f==-1&&*r==-1)
        {
        printf("\nQueue is empty. Value can't be deleted.");
        return;
        }
    else if(*f==*r)
        {
        ele=*(Q+*f);
        *f=-1;
        *r=-1;
        }
    else
        {
        ele=*(Q+*f);
        (*f)++;
        }
    printf("\nDeleted Element= %d",ele);
    }

void main()
{
int front1=-1,rear1=-1;
int queue1[maxsize];
int choice;
clrscr();
    printf("\n\t[1] Enqueue");
    printf("\n\t[2] Dequque");
    printf("\n\t[3] Display");
    printf("\n\t[7] Exit");

do
    {
    printf("\nEnter your choice= ");
    scanf("%d",&choice);

    switch(choice)
        {
        case 1: enqueue(queue1,&front1,&rear1);
            break;
        case 2: dequeue(queue1,&front1,&rear1);
            break;
        case 3: display(queue1,front1,rear1);
        }
    }while(choice!=7);
getch();
}

Program for Circular Queue using Linked list. {enqueue, dequeue, display}

/*Serial No.145     [swami127.cpp]*/

#include<stdio.h>
#include<conio.h>
#include<alloc.h>

typedef struct node
    {
    int info;
    struct node *next;
    }node;

void enqueue(node **f)
    {
    node *q=*f,*temp=(node*)malloc(sizeof(node));
    printf("\nEnter the element to be inserted= ");
    scanf("%d",&temp->info);
    if(*f==NULL)        /*if inserted node is first node*/
        *f=temp;
    else            /*if inserted node is not first node*/
        {
        while(q->next!=*f)
            {
            q=q->next;
            }
        q->next=temp;
        }
    temp->next=*f;
    }

void display(node *f)
    {
    node *q=f;
    if(f==NULL)
        printf("\nCircular Queue is Empty.");
    else
        {
        do
            {
            printf("%d ",q->info);
            q=q->next;
            }while(q!=f);
        }
    }

void dequeue(node **f)
    {
    node *q=*f,*temp;
    if(*f==NULL)
        {
        printf("\nQueue is Empty. Value can't be deleted.");
        return;
        }
    if(q->next==q)    /*if it is single node*/
        {
        temp=q;
        *f=NULL;
        free(temp);
        return;
        }
    else        /*if more than one node are present.*/
        {
        temp=q;
        while(q->next!=*f)
            {
            q=q->next;
            }
        *f=temp->next;
        q->next=*f;
        free(temp);
        }
    }

void main()
{
int choice;
node *front=NULL;
clrscr();
    printf("\n\t[1] Enqueue");
    printf("\n\t[2] Dequeue");
    printf("\n\t[3] Display");
    printf("\n\t[7] Exit");

do
    {
    printf("\nEnter your choice= ");
    scanf("%d",&choice);

    switch(choice)
        {
        case 1: enqueue(&front);
            break;
        case 2: dequeue(&front);
            break;
        case 3: display(front);
        }
    }while(choice!=7);
getch();
}

Program for Circular Queue using Array. {enqueue, dequeue, display}

/*Serial No.144     [swami126.cpp]*/

#include<stdio.h>
#include<conio.h>
#define maxsize 4

int front=-1,rear=-1,cqueue[maxsize];
void enqueue()
    {
    if((front==0&&rear==(maxsize-1))|(front==rear+1))
        {
        printf("\nQueue is full. Value can't be inserted.");
        return;
        }
    else
        {
        int ele;
        printf("\nEnter element to insert= ");
        scanf("%d",&ele);
        if(rear==maxsize-1)    /*if it is first node*/
            rear=0;
        else            /*if it is other than first node*/
            rear++;
        cqueue[rear]=ele;
        if(front==-1)
            front++;
        }
    }

void display()
    {
    int i;
    printf("\nElements in the list are:\n ");
    if(front==-1)
        printf("\nQueue is Empty.");
    else if(front==rear)    /*if only single node is present.*/
        {
        printf("%d ",cqueue[rear]);
        return;
        }
    else                 /*if more than one node present*/
        {
        if(front<rear)
            {
            for(int i=front;i<=rear;i++)
                printf("%d ",cqueue[i]);
            }
        else
            {
            for(i=front;i<maxsize;i++)
                printf("%d ",cqueue[i]);
            for(i=0;i<=rear;i++)
                printf("%d ",cqueue[i]);
            }
        }
    }

void dequeue()
    {
    if(front==-1)
        {
        printf("\nQueue is Empty. Element can't be deleted.");
        return;
        }
    if(front==rear)        /*if single node is present*/
        {
        front=rear=-1;
        return;
        }
    if(front==maxsize-1)
        front=0;
    else            /*if more than one node present*/
        front++;
    }

void main()
{
int choice;
clrscr();
    printf("\n\t[1] Enqueue");
    printf("\n\t[2] Dequeue");
    printf("\n\t[3] Display");
    printf("\n\t[7] Exit");

do
    {
    printf("\nEnter your choice= ");
    scanf("%d",&choice);

    switch(choice)
        {
        case 1: enqueue();
            break;
        case 2: dequeue();
            break;
        case 3: display();
        }
    }while(choice!=7);
getch();
}

Program for Queue using Linked list. {enqueue, dequeue, display}

/*Serial No.143     [swami125.cpp]*/

#include<stdio.h>
#include<conio.h>
#include<alloc.h>

typedef struct node
    {
    int info;
    struct node *next;
    }node;

void enqueue(node **head)
    {
    node *q=*head,*temp;
    temp=(node*)malloc(sizeof(node));
    printf("\nEnter the element to insert= ");
    scanf("%d",&temp->info);
    temp->next=NULL;
    if(q==NULL)
        {
        *head=temp;
        }
    else
        {
        while(q->next!=NULL)
            {
            q=q->next;
            }
        q->next=temp;
        }
    }

void display(node *head)
    {
    if(head==NULL)
        printf("\nQueue is Empty.");
    else
        {
        do
            {
            printf("%d ",head->info);
            head=head->next;
            }while(head!=NULL);
        }
    }

void dequeue(node **head)
    {
    node *q=*head;
    if(q==NULL)
        printf("\nQueue is Empty. Element can't be deleted.");
    else
        {
        printf("\nElement deleted= %d\n",q->info);
        *head=q->next;
        free(q);
        }
    }

void main()
{
int choice;
node *start=NULL;
clrscr();
    printf("\n\t[1] Enqueue");
    printf("\n\t[2] Dequeue");
    printf("\n\t[3] Display");
    printf("\n\t[7] Exit");

do
    {
    printf("\nEnter your choice= ");
    scanf("%d",&choice);

    switch(choice)
        {
        case 1: enqueue(&start);
            break;
        case 2: dequeue(&start);
            break;
        case 3: display(start);
        }
    }while(choice!=7);

getch();
}

Program for Queue using Array. {Add, Delete, Display, Reverse}

/*Serial No.142     [swami124.cpp]*/

#include<stdio.h>
#include<conio.h>
#define maxsize 4
int front=-1,rear=-1;
int queue[maxsize];
void reverse()
    {
    if(front==-1&&rear==-1)
        printf("\nQueue is empty.");
    else
        {
        printf("\Queue elements are reversed.");
        int j=rear,temp;
        for(int i=front;i<j;i++,j--)
            {
            temp=queue[i];
            queue[i]=queue[j];
            queue[j]=temp;
            }
        }

    }
void add()
    {
    if(rear>=maxsize-1)
        {
        printf("\nQueue is full. Value can't be added.");
        return;
        }
    int ele;
    printf("\nEntere the element to insert= ");
    scanf("%d",&ele);
    if(front==-1)
        {
        front++;
        }
    rear++;
    queue[rear]=ele;
    }

void display()
    {
    if(front==-1&&rear==-1)
        printf("\nQueue is empty.");
    else
        {
        printf("\nElements in Queue are:\n");
        for(int i=front;i<=rear;i++)
            {
            printf("%d ",queue[i]);
            }
        }
    }

void delete_que()
    {
    int ele;
    if(front==-1&&rear==-1)
        {
        printf("\nQueue is empty. Value can't be deleted.");
        return;
        }
    else if(front==rear)
        {
        ele=queue[front];
        front=-1;
        rear=-1;
        }
    else
        {
        ele=queue[front];
        front++;
        }
    printf("\nDeleted Element= %d",ele);
    }

void main()
{
int choice;
clrscr();
    printf("\n\t[1] Add");
    printf("\n\t[2] Delete");
    printf("\n\t[3] Display");
    printf("\n\t[4] Reverse Queue");
    printf("\n\t[7] Exit");

do
    {
    printf("\nEnter your choice= ");
    scanf("%d",&choice);

    switch(choice)
        {
        case 1: add();
            break;
        case 2: delete_que();
            break;
        case 3: display();
            break;
        case 4: reverse();
        }
    }while(choice!=7);
getch();
}