码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据结构02 队列及其应用【C++实现】


     这是《C++算法宝典》数据结构篇的第02节文章~

    如果你之前没有太多C++基础,请点击👉专栏:C++语法入门,如果你C++语法基础已经炉火纯青,则可以进阶算法👉专栏:算法知识和数据结构👉专栏:数据结构啦

    目录

    📕队列及其特点

    📕利用数组模拟队列的基本操作

    创建队列

    空队条件

    元素入队

     元素出队

    📕模拟超市收银问题

    📕队列操作

    初始化

    入队操作

    出队操作

    取出队首元素

    STL模板中队列的基本使用

    🧠训练:约瑟夫问题

    参考程序


    队列及其特点

    队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,前端一般叫做队头,后端叫队尾。队列就像学校做操站队一样,来的人一个一个往后站,走的时候从前往后一个一个走。

    总结队列的特点为:先入先出,即先入队的元素先出队。

    利用数组模拟队列的基本操作

    对于队列的使用,我们可以直接利用数组来模拟队列的基本操作,具体实现如下:

    创建队列

    1. int que[105]; //定义一个能存放105个数字的数组来模拟队列
    2. int front=0,rear=0; //front与rear分别表示队头和队尾元素的位置。

    空队条件

    front==rear;
    

    元素入队

    que[rear++]=x;    //元素x入队
    

     元素出队

    x=que[front++];  //队首元素出队,并将元素值赋值给x
    

     模拟超市收银问题

    假设有一批顾客来到超市,在结账时,必须排队付款。先到达收银台的顾客先结账。

    我们模拟收银过程,使用队列来实现,一般队列会提供以下几个功能:

    1. push(x):将x压入队列,即顾客来排队,应该站在队尾。
    2. pop():弹出队首元素,即排在最前面的人结完账后,离开队列。
    3. front():查询队首元素,即知道目前是谁结账。

    队列操作

    初始化

    1. const int MAXN=1100;
    2. int que[MAXN];
    3. int head = 0;
    4. int tail = 0;

    入队操作

    1. void push(int x){
    2. if(tail>=MAXN) printf("队列溢出");
    3. else{
    4. que[tail] = x;
    5. tail++;
    6. }
    7. }

    出队操作

    1. void pop(){
    2. if(head==tail) printf("队列为空");
    3. else head++;
    4. }

    取出队首元素

    1. int front(){
    2. if(head==tail) printf("队列为空");
    3. else return que[head];
    4. }

    STL模板中队列的基本使用

    对于队列的使用,我们也可以直接利用STL模板来实现,STL模板库中队列的基本操作如下:

    头文件:#include

    创建一个存放int类型数据的空队列s:queue s;

    s.empty():  判断队列是否为空,为空返回true,否则返回false;

    s.size():  返回队列中元素的个数;

    s.front():  获取队首元素的值;

    s.back():  获取队尾元素的值;

    s.push(k):   向队尾插入新的元素k;

    s.pop():    删除队列s的队首元素。

    训练:约瑟夫问题

    n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号。

    【输入描述】n和m

    【输出描述】出列的顺序

    【输入样例】4 17

    【输出样例】1 3 4 2

    参考程序

    1. #include<iostream>
    2. #include<queue>
    3. using namespace std;
    4. queue<int> que;
    5. int m,n;
    6. int main(){
    7. cin>>n>>m;
    8. for(int i=1;i<=n;i++) que.push(i); //编号入队
    9. int k=1;
    10. while(!que.empty()){
    11. if(k==m){ //数到了m
    12. cout<<que.front()<<" "; //输出
    13. que.pop(); //出队
    14. k=1; //再次初始化k
    15. }
    16. else{
    17. que.push(que.front());//队首放到队尾
    18. que.pop(); //出队
    19. k++;
    20. }
    21. }
    22. return 0;
    23. }

    从C++入门到算法,再到数据结构,查看全部文章请点击此处icon-default.png?t=N7T8http://www.bigbigli.com/

  • 相关阅读:
    记录pytorch安装 windows10 64位--第2部分:anaconda和pytorch
    工业智能网关BL110应用之十八: 如何添加COM口采集的设备
    Java 8 新特性 Ⅰ
    Pthread 并发编程(一)——深入剖析线程基本元素和状态
    Python爬虫异常处理实用技巧分享
    工厂模式代码实例详解
    美团OCTO,千亿级的分布式系统,到底牛在哪里?
    优思学院|统计过程控制SPC的两大作用
    鸿蒙开发实例:【配置OpenHarmony SDK】
    TSINGSEE青犀AI智能分析算法助力小区规范整改:楼道杂物堆放检测
  • 原文地址:https://blog.csdn.net/qq_39434533/article/details/139690779
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号