数据结构基础(3)-->队列

queue.h

  
  
  
  
  1. #ifndef QUEUE_H 
  2. #define QUEUE_H     1 
  3. #include <stdio.h> 
  4. #include <string.h> 
  5. #include <malloc.h> 
  6.  
  7. #define QUEUE_NODE_MAX      1024 
  8.  
  9. struct qnode 
  10.     char        name[32]; 
  11.     int     num; 
  12.     struct  qnode   *next; 
  13. }; 
  14. struct queue 
  15.     int     queuesize; 
  16.     struct  qnode   *head; 
  17.     struct  qnode   *tail; 
  18. }; 
  19.  
  20. int initqueue(struct queue **head); 
  21. void destroyqueue(struct queue **head); 
  22. void clearqueue(struct queue *head); 
  23. int queueempty(const struct queue *head); 
  24. int queuelength(const struct queue *head); 
  25. int queueinsert(struct queue *head, struct qnode *new); 
  26. struct qnode *queuedelete(struct queue *head); 
  27. void printqnode(const struct qnode *node); 
  28. int printqhead(const struct queue *head); 
  29.  
  30. #endif /* QUEUE_H */ 

queue.c

  
  
  
  
  1. #include <queue.h> 
  2.  
  3. int initqueue(struct queue **head) 
  4.     *head = (struct queue *)malloc(sizeof(struct queue)); 
  5.     if(!*head) { 
  6.         return -1; 
  7.     } 
  8.     (*head)->queuesize = 0; 
  9.     memset(*head, 0, sizeof(struct queue)); 
  10.     (*head)->head = (struct qnode *)malloc(sizeof(struct qnode)); 
  11.     (*head)->tail = (struct qnode *)malloc(sizeof(struct qnode)); 
  12.     if(!(*head)->head || (!(*head)->tail)) { 
  13.         free((*head)->head); 
  14.         free((*head)->tail); 
  15.         free(*head); 
  16.         *head = NULL; 
  17.         return -1; 
  18.     } 
  19.     strcpy((*head)->head->name, "head"); 
  20.     (*head)->head->num = 0; 
  21.     (*head)->head->next = (*head)->tail; 
  22.     strcpy((*head)->tail->name, "tail"); 
  23.     (*head)->tail->num = 0; 
  24.     (*head)->tail->next = (*head)->head; 
  25.     return 0; 
  26. void destroyqueue(struct queue **head) 
  27.     clearqueue(*head); 
  28.     free(*head); 
  29.     *head = NULL; 
  30. void clearqueue(struct queue *head) 
  31.     struct  qnode   *node; 
  32.     while(head->head->next != head->tail) { 
  33.         node = head->head->next->next; 
  34.         free(head->head->next); 
  35.         head->head->next = node; 
  36.     } 
  37. int queueempty(const struct queue *head) 
  38.     return head->head->next == head->tail; 
  39. int queuelength(const struct queue *head) 
  40.     return head->queuesize; 
  41. int queueinsert(struct queue *head, struct qnode *new
  42.     if(QUEUE_NODE_MAX == head->queuesize) { 
  43.         return -1; 
  44.     } 
  45.     ++(head->queuesize); 
  46.     new->next = head->tail; 
  47.     head->tail->next->next = new
  48.     head->tail->next = new
  49.     return 0; 
  50. struct qnode *queuedelete(struct queue *head) 
  51.     if(queueempty(head)) { 
  52.         return NULL; 
  53.     } 
  54.     --(head->queuesize); 
  55.     struct qnode *node; 
  56.     node = head->head->next; 
  57.     head->head->next = node->next; 
  58.     node->next = NULL; 
  59.     if(queueempty(head)) { 
  60.         head->tail->next = head->head; 
  61.     } 
  62.     return node; 
  63. void printqnode(const struct qnode *node) 
  64.     if(node) { 
  65.         printf("name=%10s, num=%3d...\n", node->name, node->num); 
  66.     } else { 
  67.         printf("is null...\n"); 
  68.     } 
  69. int printqhead(const struct queue *head) 
  70.     struct qnode *n = head->head; 
  71.     do { 
  72.         printqnode(n); 
  73.         n = n->next; 
  74.     }while(n!=head->tail); 
  75.     printqnode(n); 
  76.     printf("printqhead end...\n"); 
  77.     return 0; 

你可能感兴趣的:(职场,队列,休闲)