当前位置:   article > 正文

数据结构—循环队列(C语言)_c语言循环队列

c语言循环队列

一、循环队列的基本概念

循环队列:

初始时:Queue->front = Queue->tail = 0;

队空时:Queue->front == Queue->tail;

队满时:(Queue->tail+1)%MAXSIZE == Queue->front;

二、代码部分

一、头文件

二、循环结点

三、初始化

四、插入

五、删除

六、打印

七、测试代码

八、主函数

九、全部代码

十、测试结果

十一、总结

一、头文件

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define MAXSIZE 5

二、循环结点

  1. typedef struct CircleIntQueue
  2. {
  3. int data[MAXSIZE];
  4. int head;
  5. int tail;
  6. }*CircleIntQueuePtr;

三、初始化

  1. //初始化
  2. CircleIntQueuePtr initQueue()
  3. {
  4. CircleIntQueuePtr Queue = (CircleIntQueuePtr)malloc(sizeof(struct CircleIntQueue));
  5. Queue->head = 0;
  6. Queue->tail = 0;
  7. return Queue;
  8. }

四、插入

  1. //插入元素
  2. void insertQueue(CircleIntQueuePtr Queue,int paraData)
  3. {
  4. if((Queue->tail +1)%MAXSIZE == Queue->head)
  5. {
  6. printf("The queue is full.\n");
  7. return ;
  8. }
  9. Queue->data[(Queue->tail)%MAXSIZE] = paraData;
  10. Queue->tail++;
  11. }

五、删除

  1. //删除元素
  2. int deleteQueue(CircleIntQueuePtr Queue)
  3. {
  4. int value;
  5. //判断队列是否为空
  6. if(Queue->head == Queue->tail )
  7. {
  8. printf("The queue is empty.\n");
  9. return ;
  10. }
  11. value = Queue->data[Queue->head % MAXSIZE];
  12. Queue->head++;
  13. return value;
  14. }

六、打印

  1. //打印循环队列
  2. void printQueue(CircleIntQueuePtr Queue)
  3. {
  4. int i;
  5. //判断队列是否为空
  6. if(Queue->head == Queue->tail )
  7. {
  8. printf("The queue is empty.\n");
  9. return;
  10. }
  11. for(i = Queue->head; i < Queue->tail; i++)
  12. {
  13. printf("%d ", Queue->data[i % MAXSIZE]);
  14. }
  15. printf("\r\n");
  16. }

七、测试代码

  1. void testLinkQueue(){
  2. int i = 10;
  3. CircleIntQueuePtr tempPtr = initQueue();
  4. for (; i < 16; i ++) {
  5. insertQueue(tempPtr, i);
  6. }
  7. printQueue(tempPtr);
  8. for (i = 0; i < 6; i ++) {
  9. printf("dequeue gets %d\r\n", deleteQueue(tempPtr));
  10. }
  11. insertQueue(tempPtr, 8);
  12. printQueue(tempPtr);
  13. }

八、主函数

  1. int main(){
  2. testLinkQueue();
  3. return 1;
  4. }

九、全部代码

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define MAXSIZE 5
  4. typedef struct CircleIntQueue
  5. {
  6.     int data[MAXSIZE];
  7.     int head;
  8.     int tail;
  9. }*CircleIntQueuePtr;
  10. //初始化
  11. CircleIntQueuePtr initQueue()
  12. {
  13.     CircleIntQueuePtr Queue = (CircleIntQueuePtr)malloc(sizeof(struct CircleIntQueue));
  14.     
  15.     Queue->head = 0;
  16.     Queue->tail = 0;
  17.     
  18.     return Queue;
  19. }
  20. //插入元素
  21. void insertQueue(CircleIntQueuePtr Queue,int paraData) 
  22. {
  23.     if((Queue->tail +1)%MAXSIZE == Queue->head)
  24.     {
  25.         printf("The queue is full.\n");
  26.         return ;
  27.     }
  28.     
  29.     Queue->data[(Queue->tail)%MAXSIZE] = paraData;
  30.     Queue->tail++;
  31. }
  32. //删除元素
  33. int deleteQueue(CircleIntQueuePtr Queue)
  34. {
  35.     int value;
  36.     //判断队列是否为空
  37.     if(Queue->head == Queue->tail ) 
  38.     {
  39.         printf("The queue is empty.\n");
  40.         return ;
  41.     }    
  42.     value = Queue->data[Queue->head % MAXSIZE];
  43.     Queue->head++;
  44.     
  45.     return value;
  46. }
  47. //打印循环队列
  48. void printQueue(CircleIntQueuePtr Queue)
  49. {
  50.     int i;
  51.     //判断队列是否为空
  52.     if(Queue->head == Queue->tail )
  53.     {
  54.         printf("The queue is empty.\n");
  55.         return;
  56.     }
  57.     for(i = Queue->head; i < Queue->tail; i++)
  58.     {
  59.         printf("%d ", Queue->data[i % MAXSIZE]);
  60.     }
  61.     printf("\r\n");
  62. void testLinkQueue(){
  63.     int i = 10;
  64.     CircleIntQueuePtr tempPtr = initQueue();
  65.     for (; i < 16; i ++) {
  66.         insertQueue(tempPtr, i);
  67.     }
  68.     printQueue(tempPtr);
  69.     for (i = 0; i < 6; i ++) {
  70.         printf("dequeue gets %d\r\n", deleteQueue(tempPtr));
  71.     }
  72.     insertQueue(tempPtr, 8);
  73.     printQueue(tempPtr);
  74. }
  75. int main(){
  76.     testLinkQueue();
  77.     return 1;
  78. }

 

 

 

十、测试结果

十一、总结

1、随着代码的运行,Queue->front和Queue->tail会不断增加,但是Queue的最大空间是 MAXSIZE,所以必须要整除。

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

闽ICP备14008679号