当前位置:   article > 正文

数据结构10-循环队列_]循环队列采用一维数组 array[0.19] 存储,头 11,元素个数=12,在连续删除3 个元素

]循环队列采用一维数组 array[0.19] 存储,头 11,元素个数=12,在连续删除3 个元素(

        循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可将元素加入到第一个位置,即将存储空间的第一个位置作为队尾。

        为了区别这空和满时都有head=tail,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经满了。因此,队列判空的条件是head=tail,而队列判满的条件是head=(tail+1)%MaxSize。 

完整代码

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define MAXSIZE 5
  4. typedef struct CircleIntQueue{
  5. int data[MAXSIZE];
  6. int head;
  7. int tail;
  8. }*CircleIntQueuePtr;
  9. CircleIntQueuePtr iniQueue(){
  10. CircleIntQueuePtr result = (CircleIntQueuePtr)malloc(sizeof(struct CircleIntQueue));
  11. result->head = 0;
  12. result->tail = 0;
  13. return result;
  14. }
  15. void enqueue(CircleIntQueuePtr pPtr,int pValue){
  16. if((pPtr->tail + 1) % MAXSIZE == pPtr->head){
  17. printf("Queue full.\n");
  18. return;
  19. }
  20. pPtr->data[pPtr->tail % MAXSIZE] = pValue;
  21. pPtr->tail++;
  22. }
  23. int dequeue(CircleIntQueuePtr pPtr){
  24. int result;
  25. if(pPtr->head == pPtr->tail){
  26. printf("No element in the queue.\n");
  27. return 0;
  28. }
  29. result = pPtr->data[pPtr->head % MAXSIZE];
  30. pPtr->head++;
  31. return result;
  32. }
  33. void printCircleQueue(CircleIntQueuePtr pPtr){
  34. int i;
  35. if(pPtr->head == pPtr->tail){
  36. printf("Empty queue.");
  37. return;
  38. }
  39. printf("Element in the queue:");
  40. for(i = pPtr->head;i < pPtr->tail;i ++){
  41. printf("%d,",pPtr->data[i % MAXSIZE]);
  42. }
  43. printf("\n");
  44. }
  45. void testCircleQueue(){
  46. int i = 10;
  47. CircleIntQueuePtr temp = iniQueue();
  48. for(;i < 16; i++){
  49. enqueue(temp,i);
  50. }
  51. printCircleQueue(temp);
  52. for(i = 0;i < 6;i ++){
  53. printf("dequeue gets %d\n",dequeue(temp));
  54. }
  55. enqueue(temp,8);
  56. printCircleQueue(temp);
  57. }
  58. int main(){
  59. testCircleQueue();
  60. return 0;
  61. }

运行结果

  1. Queue full.
  2. Queue full.
  3. Element in the queue:10,11,12,13,
  4. dequeue gets 10
  5. dequeue gets 11
  6. dequeue gets 12
  7. dequeue gets 13
  8. No element in the queue.
  9. dequeue gets 0
  10. No element in the queue.
  11. dequeue gets 0
  12. Element in the queue:8,

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/884825
推荐阅读
相关标签
  

闽ICP备14008679号