当前位置:   article > 正文

【纯C语言】数据结构:循环队列_循环队列数据结构代码

循环队列数据结构代码

构造循环队列需要用到:

指向头部的front

指向尾部的rear

显然,当front与rear相等时,同时出现满足入列与出列的空满情况,现在可以使用3种不同方法进行判别:

1、设置标志位count计数

完整代码如下:

  1. #define MAX 10
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. typedef int elemtype;
  5. //计数法
  6. typedef struct SqQueue
  7. {
  8. int queue[MAX];
  9. int front;
  10. int rear;
  11. int count;
  12. }SqQueue;
  13. //初始化
  14. void InitQueue(SqQueue* Q)
  15. {
  16. Q->front = 0;
  17. Q->rear = 0;
  18. Q->count = 0;
  19. }
  20. //判断队列是否为空
  21. int SqQueueempty(SqQueue Q)
  22. {
  23. if (Q.count != 0)
  24. return 1;
  25. else
  26. return 0;
  27. }
  28. //判断队列是否为满
  29. int SqQueuefull(SqQueue Q)
  30. {
  31. if (Q.count == MAX)
  32. return 1;
  33. else
  34. return 0;
  35. }
  36. //入队
  37. int EnSqQueue(SqQueue* Q, elemtype e)
  38. {
  39. if (SqQueuefull(*Q))
  40. return 0;
  41. Q->queue[Q->rear] = e;
  42. Q->rear++;
  43. Q->count++;
  44. return 1;
  45. }
  46. //出队
  47. int DeSqQueue(SqQueue* Q, elemtype* e)
  48. {
  49. //if(SqQueueempty(*Q))
  50. //return 0;
  51. *e = Q->queue[Q->front];
  52. Q->front = (Q->front + 1) % MAX;
  53. Q->count--;
  54. return 1;
  55. }
  56. int main()
  57. {
  58. SqQueue Q;
  59. int i;
  60. elemtype e=1;
  61. InitQueue(&Q);
  62. for (i = 1; i <= 5; i++)
  63. EnSqQueue(&Q, i);
  64. while (SqQueueempty(Q))
  65. {
  66. DeSqQueue(&Q, &e);
  67. printf("%8d", e);
  68. }
  69. printf("\n");
  70. }

结果如下,显然满足队列的结构

 2、设置变量flag作为判别标准

完整代码如下:

  1. #define MAX 10
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. typedef int elemtype;
  5. //flag法
  6. typedef struct SqQueue
  7. {
  8. int queue[MAX];
  9. int front;
  10. int rear;
  11. int flag;
  12. }SqQueue;
  13. //初始化
  14. void InitQueue(SqQueue* Q)
  15. {
  16. Q->front = 0;
  17. Q->rear = 0;
  18. Q->flag = 0;
  19. }
  20. //判断队列是否为空
  21. int SqQueueempty(SqQueue Q)
  22. {
  23. if (Q.front==Q.rear&&Q.flag==0)
  24. return 0;
  25. else
  26. return 1;
  27. }
  28. //判断队列是否为满
  29. int SqQueuefull(SqQueue Q)
  30. {
  31. if (Q.front == Q.rear && Q.flag ==1)
  32. return 1;
  33. else
  34. return 0;
  35. }
  36. //入队
  37. int EnSqQueue(SqQueue* Q, elemtype e)
  38. {
  39. if (SqQueuefull(*Q))
  40. return 0;
  41. Q->queue[Q->rear] = e;
  42. Q->rear++;
  43. Q->flag = 1;
  44. return 1;
  45. }
  46. //出队
  47. int DeSqQueue(SqQueue* Q, elemtype* e)
  48. {
  49. //if(SqQueueempty(*Q))
  50. //return 0;
  51. *e = Q->queue[Q->front];
  52. Q->front = (Q->front + 1) % MAX;
  53. Q->flag = 0;
  54. return 1;
  55. }
  56. int main()
  57. {
  58. SqQueue Q;
  59. int i;
  60. elemtype e=0;
  61. InitQueue(&Q);
  62. for (i = 1; i <= 5; i++)
  63. EnSqQueue(&Q, i);
  64. while (SqQueueempty(Q))
  65. {
  66. DeSqQueue(&Q, &e);
  67. printf("%8d", e);
  68. }
  69. printf("\n");
  70. }

结果如下:

 3、浪费一个元素的位置,即有N-1个元素时就认为队满,条件为:

(Q.rear+1)&MAX==Q.front;

完整代码如下:

  1. #define MAX 10
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. typedef int elemtype;
  5. //少用一个元素法
  6. typedef struct SqQueue
  7. {
  8. int queue[MAX];
  9. int front;
  10. int rear;
  11. }SqQueue;
  12. //初始化
  13. void InitQueue(SqQueue* Q)
  14. {
  15. Q->front = 0;
  16. Q->rear = 0;
  17. }
  18. //判断队列是否为空
  19. int SqQueueempty(SqQueue Q)
  20. {
  21. if (Q.front==Q.rear) //此时少用一个元素,判空的条件变得唯一
  22. return 0;
  23. else
  24. return 1;
  25. }
  26. //判断队列是否为满
  27. int SqQueuefull(SqQueue Q)
  28. {
  29. if (Q.front==(Q.rear+1)%MAX) //判满条件为rear+1后再求余与front比较
  30. return 1;
  31. else
  32. return 0;
  33. }
  34. //入队
  35. int EnSqQueue(SqQueue* Q, elemtype e)
  36. {
  37. if (SqQueuefull(*Q))
  38. return 0;
  39. Q->queue[Q->rear] = e;
  40. Q->rear++;
  41. return 1;
  42. }
  43. //出队
  44. int DeSqQueue(SqQueue* Q, elemtype* e)
  45. {
  46. //if(SqQueueempty(*Q))
  47. //return 0;
  48. *e = Q->queue[Q->front];
  49. Q->front = (Q->front + 1) % MAX;
  50. return 1;
  51. }
  52. int main()
  53. {
  54. SqQueue Q;
  55. int i;
  56. elemtype e=0;
  57. InitQueue(&Q);
  58. for (i = 1; i <= 5; i++)
  59. EnSqQueue(&Q, i);
  60. while (SqQueueempty(Q))
  61. {
  62. DeSqQueue(&Q, &e);
  63. printf("%8d", e);
  64. }
  65. printf("\n");
  66. }

结果如下:

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号