当前位置:   article > 正文

循环队列的基本操作 严蔚敏版的c语言实现_c语言循环队列基本操作函数的实现

c语言循环队列基本操作函数的实现

运行的结果

 运行结果说明:

1.为了清清楚楚的表示队首队尾,我设置的打印函数把对应的队头队尾进行了打印

2.按照循环队列的知识,少使用一个位置,通过(q.rear+1)%MAXQSIZE==q.front来判断是否满,因此系统第一次插入的时候最后一个位置随机了一个大数

  1. //循环队列的基本操作模拟实现
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #define MAXQSIZE 10
  5. typedef struct {
  6. int *base;
  7. int front;
  8. int rear;
  9. }SqQueue;
  10. //队列初始化
  11. int InitQueue(SqQueue &q){
  12. q.base=(int*)malloc(MAXQSIZE*sizeof(int));
  13. if(!q.base){
  14. exit(-1);
  15. }
  16. q.rear=q.front=0;
  17. }
  18. //入队的操作
  19. int EnQueue(SqQueue &q,int e) {
  20. //判断是否满
  21. if((q.rear+1)%MAXQSIZE==q.front){
  22. printf("当前的队列已满");
  23. return 0;
  24. }
  25. //入队
  26. q.base[q.rear]=e;
  27. //修改队尾坐标
  28. q.rear=(q.rear+1)%MAXQSIZE;
  29. return 1;
  30. }
  31. //出队的操作
  32. int DeQueue(SqQueue &q,int &e){
  33. //判断是否空
  34. if(q.rear==q.front){
  35. return 0;
  36. }
  37. //接收出队元素
  38. e=q.base[q.front];
  39. //修改队头坐标
  40. q.front=(q.front+1)%MAXQSIZE;
  41. }
  42. //队列的长度计算
  43. int QueueLength(SqQueue q){
  44. return (q.rear-q.front+MAXQSIZE)%MAXQSIZE;
  45. }
  46. //从头至尾打印元素
  47. void print(SqQueue q){
  48. printf("\n");
  49. for(int i=0;i<MAXQSIZE;i++){
  50. printf("%d",q.base[i]);
  51. if(i==q.rear){
  52. printf("队尾");
  53. }
  54. if(i==q.front){
  55. printf("队头");
  56. }
  57. printf("\n");
  58. }
  59. }
  60. int main(){
  61. SqQueue q;
  62. InitQueue(q);
  63. for(int i=0;i<9;i++){
  64. EnQueue(q,i);
  65. }
  66. printf("当前的队列长度为:%d",QueueLength(q));
  67. print(q);
  68. int e;
  69. DeQueue(q,e);
  70. DeQueue(q,e);
  71. DeQueue(q,e);
  72. EnQueue(q,11);
  73. EnQueue(q,12);
  74. EnQueue(q,13);
  75. EnQueue(q,13); //队列已满,失败
  76. print(q);
  77. return 0;
  78. }

 

 

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

闽ICP备14008679号