• 队列的基本操作


    结构体

    1. typedef struct {
    2. int data[maxsize];
    3. int front, rear;//front为对头指针,rear为队尾指针
    4. int tag;//标志位
    5. int size;//记录数据元素
    6. }sqquene;

    初始化队列

    1. int initquene(sqquene* q)//初始化队列
    2. {
    3. q->rear = q->front = 0;
    4. }

    因为1.可以牺牲一个单元来区分队空和队满
        队满条件为:(q.rear + 1) % maxsize == q.front
        对空条件为 : q.front == q.rear
        队列中的元素个数为(q.rear - q.front + maxsize) % maxsize
    2.可以设一个记录元素个数的数据成员
        对空条件为:q.front == q.rear && q.size == 0;
        队满条件为:q.front == q.rear && q.size == maxsize;
    3.可以设一个标志位
        每次删除成功,令tag=0;插入成功时,令tag=1;
        对空条件为q.front == q.rear && tag == 0;
        队满条件为q.front == q.rear && tag == 1;判空有很多种方法

    1. int queneempty(sqquene* q)//队列判空
    2. {
    3. if (q->rear == q->front)
    4. return true;
    5. else return false;
    6. }

    进队操作

    1. int enquene(sqquene* q, int x)//进队操作
    2. {
    3. if ((q->rear+1)%maxsize==q->front)
    4. return false;
    5. q->data[q->rear] = x;
    6. q->rear=(q->rear+1)%maxsize;
    7. return true;
    8. }

    出队操作

    1. int dequene(sqquene* q, int* x)//出队操作
    2. {
    3. if (q->front==q->rear)
    4. return false;
    5. *x = q->data[q->front];
    6. q->front = (q->front + 1) % maxsize;
    7. return true;
    8. }

    完整测试代码

    1. #define maxsize 10
    2. #define true 1
    3. #define false 0
    4. typedef struct {
    5. int data[maxsize];
    6. int front, rear;//front为对头指针,rear为队尾指针
    7. int tag;//标志位
    8. int size;//记录数据元素
    9. }sqquene;
    10. int initquene(sqquene* q)//初始化队列
    11. {
    12. q->rear = q->front = 0;
    13. }
    14. int queneempty(sqquene* q)//队列判空
    15. {
    16. if (q->rear == q->front)
    17. return true;
    18. else return false;
    19. }
    20. int enquene(sqquene* q, int x)//进队操作
    21. {
    22. if ((q->rear+1)%maxsize==q->front)
    23. return false;
    24. q->data[q->rear] = x;
    25. q->rear=(q->rear+1)%maxsize;
    26. return true;
    27. }
    28. int dequene(sqquene* q, int* x)//出队操作
    29. {
    30. if (q->front==q->rear)
    31. return false;
    32. *x = q->data[q->front];
    33. q->front = (q->front + 1) % maxsize;
    34. return true;
    35. }
    36. #include
    37. int main()
    38. {
    39. sqquene q;
    40. initquene(&q);
    41. if (!queneempty(&q)) //队列判空
    42. printf("队列不为空\n");
    43. else
    44. printf("队列为空\n");
    45. int x = 0;
    46. printf("要进队的元素为:");
    47. scanf("%d", &x);
    48. if (enquene(&q, x)) //进队操作
    49. printf("进队元素为%d\n", x);
    50. else
    51. printf("队列满,不能进队%d\n", x);
    52. if (dequene(&q, &x)) //出队操作
    53. printf("出队元素为%d\n", x);
    54. else
    55. printf("队列为空,不能出队\n");
    56. printf("%d\n", x);
    57. }

  • 相关阅读:
    【计算机视觉】图像分割与特征提取——基于Log、Canny的边缘检测
    一周万星的文本转语音开源项目「GitHub 热点速览」
    华为手机的备忘录,你真的会用吗?这4个小功能,很多人都不会用
    测试用例设计方法之场景设计法
    hdu 3549 Flow Problem(最大流 EK,sap)
    TCP与UDP
    《动手学深度学习 Pytorch版》 6.6 卷积神经网络
    快速了解员工脉动调查
    集合之究极进阶最终形态之暴龙战士!
    LeetCode 40. Combination Sum II【回溯,剪枝】中等
  • 原文地址:https://blog.csdn.net/m0_46702681/article/details/132951666