Saturday, September 3, 2011

Multiple Queue in an array


/*Program for multiple queues in an array */


#define MAX 20
#include<stdio.h>
#include<stdlib.h>

int A[MAX],R[20],F[20],qcount; //A[] for storing data,maximum of 19 queues
void initialize()
  {
int i;
for(i=0;i<qcount;i++)
R[i]=F[i]=(MAX/qcount)*i;
R[qcount]=F[qcount]=MAX;//to handle the full condition of last queue
  }
void createspace(int qno)
 {
    int i,j;
    //locate empty space in the forward direction
    for(i=qno+1;i<qcount;i++)
       if(F[i+1]-R[i] > 1)
{
  //shift data right by 1 place
  for(j=R[i];j>=F[qno+1];j--)
A[j+1]=A[j];
  //adjust rear and front
  for(j=qno+1;j<=i;j++)
     {
F[j]++;
R[j]++;
     }
   return;
 }
    //locate empty space in the backward direction
    for(i=qno-1;i>=1;i--)
       if(F[i+1]-R[i] > 1)
{
  //shift data right by 1 place
  for(j=F[i+1];j<=R[qno];j++)
A[j-1]=A[j];
  //adjust rear and front
  for(j=i+1;j<=qno;j++)
     {
F[j]--;
R[j]--;
     }
 }

 }

void insert(int qno,int x)
  {
if(R[qno]==F[qno+1])
createspace(qno);
if(R[qno]==F[qno+1])
printf("\nOverflow ......");
else
A[R[qno]++]=x;
  }
int delet(int qno)
  {
int x;
if(R[qno]==F[qno])
  {
printf("\nUnderflow .... can not delete");
return(-1);
  }
else
  {
x=A[F[qno]++];
return(x);
   }
   }
 void print(int qno)
   {
      int i;
      printf("\nData of queue No. : %d \n",qno+1);
      for(i=F[qno] ;i<R[qno]; i++)
 printf("%d  ",A[i]);
   }
int main()
  {
     int x,qno,op;
     printf("\nEnter No. of queues(<=19) : ");
     scanf("%d",&qcount);
     initialize(qcount);
     do
       {
 printf("\n1)Insert\n2)Delete\n3)Print\n4)Quit");
 printf("\nEnter Your choice : ");
 scanf("%d",&op);
 switch(op)
    {
case 1: printf("\nEnter queue no. and data to be inserted : ");
scanf("%d%d",&qno,&x);
insert(qno-1,x);
break;
case 2: printf("\nEnter queue number : ");
scanf("%d",&qno);
x=delet(qno-1);
printf("\nData deleted is : %d",x);
break;
case 3: printf("\nEnter queue number : ");
scanf("%d",&qno);
print(qno-1);
break;
    }
      }while(op!=4);
  }

No comments:

Post a Comment