Skip to content
c
#define TRUE   1
#define FALSE  0
#define OK     1
#define ERROR  0
#define IBFEASIBLE  -1
#define OVERFLOW    -2  
typedef  int   Status;

#define  nullE  -999
typedef  int  ElemType;

typedef struct {                                                                                           
   ElemType  *base;   
   int        front;                                
   int        rear;   
   int        size;   
} *SqQueue;           

SqQueue InitQueue(int size) { 
   SqQueue Q;                 
   if (!(Q = (SqQueue)malloc(sizeof(*Q)))) exit(OVERFLOW);
   if (!(Q->base = (ElemType*)calloc(size, sizeof(ElemType)))) exit(OVERFLOW);
   Q->front = Q->rear = 0;   Q->size = size;      
   return Q;                                     
}

Status ClearQueue(SqQueue Q) {  
   if (!Q) return ERROR;              
   Q->front = Q->rear;   return OK;   
}

SqQueue FreeQueue(SqQueue Q) {
   if (Q) { free(Q->base);   free(Q); }  
   return NULL;     
}
int QueueLen(SqQueue Q) {  
   if (!Q) return -1;      
   
   return (Q->rear - Q->front + Q->size) % Q->size; 
}

Status EnQueue(SqQueue Q, ElemType e) {  
   if (!Q || (Q->rear+1) % Q->size == Q->front)   
      return ERROR;                               
   Q->base[Q->rear] = e;                          
   Q->rear = (Q->rear + 1) % Q->size;             
   return OK;
}

ElemType DeQueue(SqQueue Q) {  
  
   if (!Q || Q->front == Q->rear) return nullE;  
   ElemType e = Q->base[Q->front];                
   Q->front = (Q->front + 1) % Q->size;          
   return e;
}

持之苟有恒,久久自芬芳