Monday, October 28, 2013

Design a Queue using Cirucular array

 //Queue Data Structure
typedef struct {
    int front,rear;
    int size;
    int *data;
}Que;

Que * CreateQue (int size)
{
    Que * temp = (Que *) malloc (sizeof (Que));
    temp->front = -1;
    temp->rear = -1;
    temp->size =size;
    temp->data = (int *) malloc (size * (sizeof(int)));
    return temp;
}

 int isFull (Que *q)
{
    return ( (q->rear+1)%q->size == q->front);
}

int isEmpty (Que *q)
{
    return (q->front == -1);
}

void enQue(Que *q , int data)
{
 if (isFull(q)){
        printf("\nQueue is Full\n");
 }
 else{
    q->rear = ((q->rear+1)%q->size);
    q->data[q->rear] = data;
    if(q->front==-1)
        q->front=q->rear;
    }
}

int deQue (Que *q)
{
    int data;
 if (isEmpty(q)){
     printf("\nQueue is empty\n");
     return -1;
 }
 data = q->data[q->front];
 if(q->front == q->rear){
     q->front = -1 ;
     q->rear = -1;
 }
 else
 q->front = (q->front+1)%q->size;
  return data;
}

void DeleteQue (Que *q)
{
  if (q){
      if(q->data)
          free(q->data);
      free(q);
      }
}

No comments:

Post a Comment