Circular Queue using Array


#define SIZE 5            /* Size of Circular Queue */
int CQ[SIZE], f = -1, r = -1; /* Global declarations */

CQinsert(int elem) { /* Function for Insert operation */
 if (CQfull())
  printf("\n\n Overflow!!!!\n\n");
 else {
  if (f == -1)
   f = 0;
  r = (r + 1) % SIZE;
  CQ[r] = elem;
 }
}

int CQdelete() { /* Function for Delete operation */
 int elem;
 if (CQempty()) {
  printf("\n\nUnderflow!!!!\n\n");
  return (-1);
 } else {
  elem = CQ[f];
  if (f == r) {
   f = -1;
   r = -1;
  } /* Q has only one element ? */
  else
   f = (f + 1) % SIZE;
  return (elem);
 }
}

int CQfull() { /* Function to Check Circular Queue Full */
 if ((f == r + 1) || (f == 0 && r == SIZE - 1))
  return 1;
 return 0;
}

int CQempty() { /* Function to Check Circular Queue Empty */
 if (f == -1)
  return 1;
 return 0;
}

display() { /* Function to display status of Circular Queue */
 int i;
 if (CQempty())
  printf(" \n Empty Queue\n");
 else {
  printf("Front[%d]->", f);
  for (i = f; i != r; i = (i + 1) % SIZE)
   printf("%d ", CQ[i]);
  printf("%d ", CQ[i]);
  printf("<-[%d]Rear", r);
 }
}

main() { /* Main Program */
 int opn, elem;
 do {
  clrscr();
  printf("\n ### Circular Queue Operations ### \n\n");
  printf("\n Press 1-Insert, 2-Delete,3-Display,4-Exit\n");
  printf("\n Your option ? ");
  scanf("%d", &opn);
  switch (opn) {
  case 1:
   printf("\n\nRead the element to be Inserted ?");
   scanf("%d", &elem);
   CQinsert(elem);
   break;
  case 2:
   elem = CQdelete();
   if (elem != -1)
    printf("\n\nDeleted Element is %d \n", elem);
   break;
  case 3:
   printf("\n\nStatus of Circular Queue\n\n");
   display();
   break;
  case 4:
   printf("\n\n Terminating \n\n");
   break;
  default:
   printf("\n\nInvalid Option !!! Try Again !! \n\n");
   break;
  }
  printf("\n\n\n\n  Press a Key to Continue . . . ");
  getch();
 } while (opn != 4);
}

Post a Comment

Previous Post Next Post