Sunday, 25 September 2011

Circular Queue using Arrays

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 5

void insert(int q[], int *f, int *r)
{
   if(*f == (*r+1)%SIZE)
      return;
   *r=(*r+1)%SIZE;
     printf("Enter the data\n");
     scanf("%d",&q[*r]);
     if(*f == -1)
        *f= 0;
}

void del(int *f, int *r)
{
   if(*f== -1)
      return;
   if(*f == *r)
     *f = *r = -1;
   else
     *f= (*f+1)% SIZE;
}

void display(int q[], int *f, int *r)
{
   int i;
   if(*f== -1)
       printf("circular queue is empty\n");
   else
   {
      for(i= *f; i!= *r; i=(i+1)%SIZE)
        printf("%d", q[i]);
      if(*f == (*r+1)%SIZE)
        printf("circular queue is full\n");
    }
}

void main()
{
  int ch, q[SIZE],f = -1,r= -1;
  while(1)
  {
    display(q,&f,&r);
    printf(" 1. Insert\n 2. Delete\n 3.quit\n");
    printf("Enter your choice\n");
    scanf("%d",&ch);
    switch(ch)
    {
       case 1 : insert(q,&f,&r);break;
       case 2 : del(&f,&r);break;
       default : return;
     }
 }

This is my program which uses structures..a better way :)


#include<stdio.h>
#define size 3

struct queue
{
  int front,rear;
  int array[size];
}s;

int count=0,j;

int qfull()
{
  if(count == size)
    return 1;
  return 0;
}

int qempty()
{
 if(count == 0)
  return 1;
 return 0;
}

void insert_rear(int x)
{
 
   s.rear=(s.rear+1)%size;
   s.array[s.rear]=x;
   count++;
   return;
}


int del_front()
{
 int i;

 i=s.array[s.front];
 s.front=(s.front+1)%size;
 count--;
 printf("The element deleted is %d\n", i);

}

void display()
{
 int i,j=s.front;
 if(qempty())
  printf("QUEUE IS EMPTY\n");
 else
 {
   printf("The contents of the queue are:\n");
   for(i=0;i<count;i++)
    {
      printf("%d\n",s.array[j]);
      j=(j+1)%size;
    }
 }
}

main()
{
  s.rear= size-1;s.front=0;
  int ch,x,c;
  while(1)
  {
   printf("1.Insert\n2.Delete\n3.Display\n4.Exit\n");
   printf("Enter your choice\n");
   scanf("%d",&ch);
   switch(ch)
   {
    case 1 : if(qfull())
             {
              printf("OVERFLOW IN QUEUE\n");
             }
             else
             {
              printf("Enter the element to be inserted\n");
              scanf("%d",&x);
              insert_rear(x);
             }
             break;
    case 2 :  if(qempty())
              {
               printf("UNDERFLOW\n");
              }
               else
             del_front();
             break;
    case 3 : display();
             break;
    default : return;
   }
  }
}


No comments:

Post a Comment