C语言队列动态数组实现

 

  
  
  
  
  1. /* 
  2.  * Queue.h 
  3.  * 
  4.  *  Created on: 2011-10-7 
  5.  *      Author: Admin 
  6.  */ 
  7.  
  8. #ifndef QUEUE_H_ 
  9. #define QUEUE_H_ 
  10. #include <stdio.h> 
  11. #include <stdlib.h> 
  12.  
  13. /* the data type that contained in the queue */ 
  14. typedef int QueueData; 
  15.  
  16. typedef struct _queue{ 
  17.  
  18.     size_t length;      /* queue length */ 
  19.     size_t capacity;    /* queue capacity */ 
  20.     size_t index;       /* get data index */ 
  21.     size_t push_index;  /* insert index */ 
  22.     QueueData *data;    /* the data that queue contain */ 
  23. }Queue, *pQueue; 
  24.  
  25. /* initialize queue */ 
  26. void queue_init(pQueue* ptr, size_t size); 
  27.  
  28. /* free memory which the queue own*/ 
  29. void queue_destroy(pQueue* ptr); 
  30.  
  31. /* add data to queue */ 
  32. int queue_push(pQueue ptr, QueueData val); 
  33.  
  34. /* dequeue */ 
  35. QueueData queue_pop(pQueue ptr); 
  36.  
  37. /* get data at front of the queue */ 
  38. QueueData queue_top(pQueue ptr); 
  39.  
  40. /* return the size of queue */ 
  41. size_t queue_size(pQueue ptr); 
  42.  
  43. #endif /* QUEUE_H_ */ 
  44.  
  45.  
  46. /* 
  47.  * Queue.c 
  48.  * 
  49.  *  Created on: 2011-10-7 
  50.  *      Author: Admin 
  51.  */ 
  52. #include <stdio.h> 
  53. #include <stdlib.h> 
  54. #include "Queue.h" 
  55.  
  56. /* initialize queue */ 
  57. void queue_init(pQueue* ptr, size_t size){ 
  58.  
  59.     *ptr = (pQueue)malloc(sizeof(Queue)); 
  60.     if ((*ptr) == NULL){ 
  61.         exit(1); 
  62.     } 
  63.     (*ptr)->capacity = size; 
  64.     (*ptr)->length = 0; 
  65.     (*ptr)->index = 0; 
  66.     (*ptr)->push_index = 0; 
  67.     (*ptr)->data = (QueueData*)malloc(sizeof(QueueData) * size); 
  68.  
  69.     if ((*ptr)->data == NULL){ 
  70.         exit(1); 
  71.     } 
  72.  
  73. /* free memory which the queue own*/ 
  74. void queue_destroy(pQueue* ptr){ 
  75.     free((*ptr)->data); 
  76.     (*ptr)->data = NULL; 
  77.     free((*ptr)); 
  78.     (*ptr) = NULL; 
  79.  
  80. /* add data to queue */ 
  81. int queue_push(pQueue ptr, QueueData val){ 
  82.     if (ptr->length >= ptr->capacity){ 
  83.         return 0; 
  84.     } 
  85.     ptr->push_index = (ptr->push_index % ptr->capacity) + 1; 
  86.     ptr->data[ptr->push_index - 1] = val; 
  87.     ptr->length += 1; 
  88.     return 1; 
  89.  
  90. /* dequeue */ 
  91. QueueData queue_pop(pQueue ptr){ 
  92.     if (ptr->length <= 0 ){ 
  93.         exit(1); 
  94.     } 
  95.     ptr->length -= 1; 
  96.     ptr->index = ((ptr->index) % ptr->capacity) + 1; 
  97.     return ptr->data[ptr->index - 1]; 
  98.  
  99.  
  100. /* get data at front of the queue */ 
  101. QueueData queue_top(pQueue ptr){ 
  102.  
  103.     return ptr->data[ptr->index]; 
  104.  
  105.  
  106. /* return the size of queue */ 
  107. size_t queue_size(pQueue ptr){ 
  108.  
  109.     return ptr->length; 

 

你可能感兴趣的:(数据结构,编程,C++,c,队列)