• 队列的基本操作


    结构体

    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. }

  • 相关阅读:
    基于Docker部署GeoWebCache(离线地图)
    STL常用算法——查找算法
    计量数据分析数据库-Stata分析包使用指南、计量分析资料等八大数据大全
    python获取安卓Hierarchy并解析
    JVM之选择合适的垃圾收集器(CMS、G1)
    C语言 -- 零基础入门详解
    Paging 实现加载更多
    《golang设计模式》第二部分·结构型模式-05-门面模式Facade)
    结合实践总结docker 安装 mysql5.7
    gin实现event stream
  • 原文地址:https://blog.csdn.net/m0_46702681/article/details/132951666