当前位置:   article > 正文

循环队列的初始化,入队,出队,求队长,取队头元素_循环队列初始化

循环队列初始化

1.要会判断队满:

  1. if((Q.rear+1)%MAXQSIZZE == Q.front){//判断队满
  2. return ERROR;
  3. }

2.判断队空

if (Q.front == Q.rear) return ERROR;//判断队空

3.获取队长

j = (Q.rear - Q.front + MAXQSIZZE) % MAXQSIZZE;

4.队头后移和队尾后移要注意,移动要怎么写?(重要!)

Q.front = (Q.front + 1) % MAXQSIZZE;//让队头元素后移
Q.rear = (Q.rear + 1) % MAXQSIZZE;//取余是为了在队尾时加一可以回到头,形成循环

下面上代码:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define MAXQSIZZE 100
  4. #define OK 1
  5. #define ERROR 0
  6. #define OVERFLOW -2
  7. int i, n, e, j, x, num;
  8. //队列看成循环队列,通过少放一个元素来解决假上溢
  9. typedef struct {
  10. int* base;//指向数组名的指针,代表数组第一个元素的地址
  11. int front;//队头元素的下标
  12. int rear;//队尾元素的下标
  13. }SqQueue;
  14. //1.循环队列的初始化
  15. int InitSqQueue_Q(SqQueue &Q) {
  16. Q.base = (int*)malloc(MAXQSIZZE * sizeof(SqQueue));//分配数组的空间
  17. if (!Q.base)exit(OVERFLOW);
  18. Q.front = Q.rear = 0;//让队列为空
  19. return 0;
  20. }
  21. //2.循环队列入队(元素e入队)
  22. int EnQueue_Q(SqQueue &Q,int e) {
  23. if((Q.rear+1)%MAXQSIZZE == Q.front){//判断队满
  24. return ERROR;
  25. }
  26. Q.base[Q.rear] = e;//把元素e插入到队列里面的数组下标为Q.rear的位置,也就是队尾
  27. Q.rear = (Q.rear + 1) % MAXQSIZZE;//取余是为了在队尾时加一可以回到头,形成循环
  28. return OK;
  29. }
  30. //2.循环队列出队(出队元素用e返回)
  31. int DeQueue_Q(SqQueue& Q,int &e) {
  32. if (Q.front == Q.rear) return ERROR;//判断队空
  33. e = Q.base[Q.front];//保存队头元素
  34. Q.front = (Q.front + 1) % MAXQSIZZE;//让队头元素后移
  35. return OK;
  36. }
  37. //3.获取队长
  38. int SqQueueLength_Q(SqQueue& Q,int &j) {
  39. j = (Q.rear - Q.front + MAXQSIZZE) % MAXQSIZZE;
  40. return j;
  41. }
  42. //4.取队头元素
  43. int GetHead_Q(SqQueue &Q,int &e) {
  44. if (Q.front == Q.rear) {
  45. printf("队空");
  46. return ERROR;
  47. }
  48. e = Q.base[Q.front];
  49. return OK;
  50. }
  51. int main() {
  52. SqQueue Q;
  53. InitSqQueue_Q(Q);
  54. printf("请输入初始队列元素个数:");
  55. scanf("%d", &n);
  56. printf("输入队列元素:");
  57. for (i = 0; i < n; i++) {
  58. scanf("%d", &e);
  59. EnQueue_Q(Q, e);
  60. printf("%d", e);
  61. }
  62. GetHead_Q(Q, e);
  63. printf("\n队头元素为:%d",e);
  64. printf("\n请输入出队的个数:");
  65. scanf("%d", &x);
  66. printf("出队的元素为:");
  67. for (i = 0; i < x; i++) {
  68. DeQueue_Q(Q, e);
  69. printf("%d", e);
  70. }
  71. SqQueueLength_Q(Q,j);
  72. printf("\n出队后的元素个数剩下:%d", j);
  73. printf("\n出队后的循环队列为:");
  74. for (i = 0; i < j; i++) {
  75. printf("%d", Q.base[Q.front]);
  76. Q.front = (Q.front + 1) % MAXQSIZZE;
  77. }
  78. return 0;
  79. }

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

闽ICP备14008679号