LinkQueue.h #ifndef LINKQUEUE_H_H #define OK 0 #define ERROR -1 typedef int type; typedef struct QNode { type date; struct QNode *next; }QNode; typedef struct { QNode *front; QNode *rear; }LinkQueue; int init_linkQueue(LinkQueue*); int make_node(QNode**); int destroy_linkQueue(LinkQueue*); int clear_linkQueue(LinkQueue*); int insert_linkQueue(LinkQueue*, type); int delete_linkQueue(LinkQueue*, type*); int create_linkQueue(LinkQueue*); int print_linkQueue(LinkQueue*); int linkQueue_empty(LinkQueue*); int linkQueue_length(LinkQueue*); int get_head(LinkQueue*, type*); #endif LinkQueue.cpp #include<stdio.h> #include<stdlib.h> #include"LinkQueue.h" int init_linkQueue(LinkQueue *queue) { if(!(queue->front = (QNode*)malloc(sizeof(QNode)))) return ERROR; queue->rear = queue->front; queue->front->next = queue->rear->next = NULL; return OK; } int make_node(QNode **node) { if(!((*node) = (QNode*)malloc(sizeof(QNode)))) return ERROR; return OK; } int destroy_linkQueue(LinkQueue *queue) { QNode *tmp = queue->front; QNode *tmp1; while(tmp) { tmp1 = tmp; tmp = tmp->next; free(tmp1); } queue->front = queue->rear = NULL; return OK; } int clear_linkQueue(LinkQueue *queue) { if(queue->front == NULL || queue->front->next == NULL) return ERROR; QNode *tmp = queue->front->next; QNode *tmp1; while(tmp) { tmp1 = tmp; tmp = tmp->next; free(tmp1); } queue->front->next = queue->rear->next = NULL; return OK; } int insert_linkQueue(LinkQueue *queue, type e) { if(queue->front == NULL) return ERROR; QNode *node; if(make_node(&node)) return ERROR; node->date = e; node->next = queue->rear->next; queue->rear->next = node; queue->rear = node; return OK; } int delete_linkQueue(LinkQueue *queue, type *e) { if(queue->front == NULL || queue->front->next == NULL) return ERROR; QNode *tmp; *e = queue->front->next->date; tmp = queue->front->next; queue->front->next = tmp->next; free(tmp); return OK; } int create_linkQueue(LinkQueue *queue) { if(queue->front == NULL) return ERROR; type num; printf("input num: "); scanf("%d",&num); while(num) { insert_linkQueue(queue,num); scanf("%d",&num); } return OK; } int print_linkQueue(LinkQueue *queue) { if(queue->front == NULL || queue->front->next == NULL) return ERROR; QNode *tmp = queue->front->next; while(tmp) { printf("%d ",tmp->date); tmp = tmp->next; } printf("/n"); return OK; } int linkQueue_empty(LinkQueue *queue) { if(queue->front == NULL) return ERROR; if(queue->front->next == NULL) return true; return false; } int linkQueue_length(LinkQueue *queue) { if(queue->front == NULL) return ERROR; if(queue->front->next == NULL) return 0; int cnt = 0; QNode *tmp = queue->front->next; while(tmp != queue->rear) { cnt++; tmp = tmp->next; } return cnt + 1; } int get_head(LinkQueue *queue, type *e) { if(queue->front == NULL || queue->front->next == NULL) return ERROR; *e = queue->front->next->date; return OK; }