Insertion And Deletion Operation Over Multiple Queue In C language

A simple C language program to implement multiple queues in a single dimension array.
This is a revised version of Insertion And Deletion Operation Over Multiple Queue | multiple queue in data structure.

```#include
#include
# define max 20

int insq (int queue[max], int qno, int rear[], int limit[], int *data) {
if (rear[qno] == limit[qno])
return(-1);
else {
rear[qno]++; //... rear[qno] = rear[qno] + 1;
queue[ rear[qno] ] = *data;
return(1);
} // else
} // insq

int delq (int queue[max], int qno, int front[], int rear[], int *data) {
if( front[qno] == rear[qno] )
return(-1);
else {
front[qno]++; //... front[qno] = front[qno] + 1;
*data = queue[ front[qno] ];
return(1);
} // else
} // delq

int getQueueNumber(int n) {
int qNo=0;
Inva:
printf("\n Enter a Logical Queue Number (1 to %d) : ", n);
scanf("%d", &qNo);
if (qNo<1 || qNo >n) {
printf(" Invalid Queue Number. Please try again.\n");
goto Inva;
}
return qNo;
}

void main() {
int queue[max],  data;
int bott[10], limit[10], f[10], r[10];
int i, n, qno, size, option, reply;

printf("\n C Language program to implement the Multiple Queues \n");
printf("\n How Many Queues ? : ");
scanf("%d", &n);
size = max / n; //... Get Max. size for each Queue

//... Initialize bottom for each Queue

bott[0] = -1; //... Bottom of first Queue is -1
for(i = 1; i < n; i++)
bott[i] = bott[i-1] + size;

//... Initialize Limit of each Queue

for(i = 0; i < n; i++) //... Limit of i'th Queue is equal to bottom of i'th Queue + Size
limit[i] = bott[i] + size;

//... Initialize Front & Rear of each Queue
//... Initial value of Front & Rear of each Queue is same as its Bottom Value

for(i = 0; i < n; i++)
f[i] = r[i] = bott[i];

//... Process the Queues

do {
printf("\n\n C Language program to implement the Multiple Queues \n");
printf("\n 1. Insert in a Queue");
printf("\n 2. Delete from a Queue");
printf("\n 3. Print from a Queue");
printf("\n 3. Exit \n");
printf("\n Select proper option ( 1 / 2 / 3 / 4) : ");
scanf("%d", &option);
switch(option) {
case 1 : //... Insert
qno	= getQueueNumber(n);
printf("\n Enter Data : ");
scanf("%d", &data);
reply = insq(queue, qno-1, r, limit, &data);
printf("\n Queue %d is Full \n", qno);
else
printf("\n %d is inserted in a Queue No. %d \n", data, qno);
break;
case 2 : //... Delete
qno	= getQueueNumber(n);
reply = delq(queue, qno-1, f, r, &data);
printf("\n Queue %d is Empty \n", qno);
else
printf("\n %d is deleted from Queue No. %d \n", data, qno);
break;
case 3:
qno	= getQueueNumber(n);
printf("\n Elements of Queue %d are as : ", qno);
if (f[qno-1]==r[qno-1]) {
printf("\n Queue is empty");
break;
}
for (i=f[qno-1]+1; i<=r[qno-1]; i++)
printf("%d\t", queue[i]);
printf("\n");
break;
case 4 :
break;
default:
printf("\n Invalid input. Please try again.");
} // switch
}while(option!=4);
} // main```