Source Code : Program that implements circular queue as an array.

/* CH7PR5.C: Program that implements circular queue as an array. */

#include <stdio.h>

#include <conio.h>

#define MAX 10

void addq ( int *, int, int *, int * ) ;

int delq ( int *, int *, int * ) ;

void display ( int * ) ;

void main( )

{

  int arr[MAX] ;

  int i, front, rear ;

  clrscr( ) ;

  /* initialise data member */

  front = rear = -1 ;

  for ( i = 0 ; i < MAX ; i++ )

  arr[i] = 0 ;

  addq ( arr, 14, &front, &rear ) ;

  addq ( arr, 22, &front, &rear ) ;

  addq ( arr, 13, &front, &rear ) ;

  addq ( arr, -6, &front, &rear ) ;

  addq ( arr, 25, &front, &rear ) ;

  printf ( "\nElements in the circular queue: " ) ;

  display ( arr ) ;

  i = delq ( arr, &front, &rear ) ;

  printf ( "Item deleted: %d", i ) ;

  i = delq ( arr, &front, &rear ) ;

  printf ( "\nItem deleted: %d", i ) ;

  printf ( "\nElements in the circular queue after deletion: " ) ;

  display ( arr ) ;

  addq ( arr, 21, &front, &rear ) ;

  addq ( arr, 17, &front, &rear ) ;

  addq ( arr, 18, &front, &rear ) ;

  addq ( arr, 9, &front, &rear ) ;

  addq ( arr, 20, &front, &rear ) ;

  printf ( "Elements in the circular queue after addition: " ) ;

  display ( arr ) ;

  addq ( arr, 32, &front, &rear ) ;

  printf ( "Elements in the circular queue after addition: " ) ;

  display ( arr ) ;

  getch( ) ;

}

/* adds an element to the queue */

void addq ( int *arr, int item, int *pfront, int *prear )

{

  if ( ( *prear == MAX - 1 && *pfront == 0 ) || (  *prear + 1 == *pfront ) )

  {

  printf ( "\nQueue is full." ) ;

  return ;

  }

  if ( *prear == MAX - 1 )

  *prear = 0 ;

  else

  ( *prear )++ ;

  arr[*prear] = item ;

  if ( *pfront == -1 )

  *pfront = 0 ;

}

/* removes an element from the queue */

int delq ( int *arr, int *pfront, int *prear )

{

  int data ;

  if ( *pfront == -1 )

  {

  printf ( "\nQueue is empty." ) ;

  return NULL ;

  }

  data = arr[*pfront] ;

  arr[*pfront] = 0 ;

  if ( *pfront == *prear )

  {

  *pfront = -1 ;

  *prear = -1 ;

  }

  else

  {

  if ( *pfront == MAX - 1 )

  *pfront = 0 ;

  else

  ( *pfront )++ ;

  }

  return data ;

}

/* displays element in a queue */

void display ( int * arr )

{

  int i ;

  printf ( "\n" ) ;

  for ( i = 0 ; i < MAX ; i++ )

  printf ( "%d\t", arr[i] ) ;

  printf ( "\n" ) ;

}