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  -99
typedef  int  ElemType;

typedef struct QNode {
   ElemType      data;
   struct QNode *next;
} QNode, *QueuePtr;

typedef struct {
   QueuePtr front;  
   QueuePtr rear;   
} *LinkQueue;

LinkQueue InitQueueL() {  
   LinkQueue Q;          
   if(!(Q = (LinkQueue)malloc(sizeof(*Q)))) exit(OVERFLOW);  
   if (!(Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode)))) exit(OVERFLOW);
   Q->front->next = NULL;      
   return Q;                   
}
        
LinkQueue FreeQueueL(LinkQueue Q) {  
   if (!Q) return NULL;  
   QueuePtr q, p = Q->front;
   while (p) {     
      q = p;   p = p->next;   free(q);
   }
   free(Q);   return NULL; 
}

Status EnQueueL(LinkQueue Q, ElemType e) { 
   if (!Q) return ERROR;   
   QueuePtr p;
   if (!(p = (QueuePtr)malloc(sizeof(QNode)))) return ERROR;  // 分配新结点
   p->data = e;   p->next = NULL;   
   Q->rear->next = Q->rear = p;     
   return OK;
}

ElemType DeQueueL(LinkQueue Q) {  
   
   if (!Q || Q->front==Q->rear) return nullE;  
   QueuePtr p = Q->front->next;         
   ElemType e = p->data;                
   Q->front->next = p->next;            
   if (Q->rear==p) Q->rear = Q->front;  
   free(p);                             
   return e;                            
}

持之苟有恒,久久自芬芳