define.h
1 // define.h 2 #ifndef __MENGQL_DEFINE__ 3 #define __MENGQL_DEFINE__ 4 5 #define C_LOG_DBG(format, ...) 6 //printf("[%s@%s,%d] " format ,__FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__); 7 #define C_LOG_ERR(format, ...) printf("[%s@%s,%d] " format ,__FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__); 8 typedef enum EStatus {ERROR, OK} Status; 9 10 #endif
LinkQueue.h
1 // LinkQueue.h 2 #ifndef __LINK_QUEUE_H__ 3 #define __LINK_QUEUE_H__ 4 #include "define.h" 5 typedef struct QNode 6 { 7 QElemType data; 8 struct QNode *next; 9 }QNode, *QueuePtr;10 11 typedef struct12 {13 QueuePtr front;14 QueuePtr rear;15 }LinkQueue;16 17 #endif
LinkQueue.c
1 // LinkQueue.c 2 typedef int QElemType; 3 #include "LinkQueue.h" 4 #include5 #include 6 7 Status InitQueue(LinkQueue *Q) 8 { 9 Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));10 if(Q->front == NULL)11 {12 C_LOG_ERR("%s", "malloc error!!!\n");13 return ERROR;14 }15 Q->front->next = NULL;16 return OK;17 }18 Status DestroyQueue(LinkQueue *Q)19 {20 while(Q->front != NULL)21 {22 Q->rear = Q->front->next;23 free(Q->front);24 Q->front = Q->rear;25 }26 return OK;27 }28 Status EnQueue(LinkQueue *Q, QElemType e)29 {30 QueuePtr p;31 p = (QueuePtr)malloc(sizeof(QNode));32 if(p == NULL)33 {34 C_LOG_ERR("%s", "malloc error!!!\n");35 return ERROR;36 }37 p->data = e; p->next = NULL;38 Q->rear->next = p;39 Q->rear = p;40 return OK;41 }42 Status DeQueue(LinkQueue *Q, QElemType *e)43 {44 QueuePtr p;45 if(Q->front == Q->rear)46 {47 C_LOG_ERR("%s", "queue is empty!!!\n");48 return ERROR;49 }50 p = Q->front->next;51 *e = p->data;52 Q->front = Q->front->next;53 free(p);54 return OK;55 }56 Status QueueEmpty(LinkQueue *Q)57 {58 if(Q->front == Q->rear)59 {60 return OK;61 }62 return ERROR;63 }64 65 int main()66 {67 LinkQueue Q;68 QElemType e;69 70 InitQueue(&Q);71 EnQueue(&Q, 1);72 EnQueue(&Q, 2);73 EnQueue(&Q, 3);74 EnQueue(&Q, 4);75 EnQueue(&Q, 5);76 while(Q.front != Q.rear)77 {78 DeQueue(&Q, &e);79 printf("%d\n", e);80 }81 return 0;82 }