码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 队列(定义,基本操作,顺序存储,链式存储)


    目录

    • 1.队列的定义
      • 1.重要术语
      • 2.基本操作
    • 2.队列的顺序存储
      • 1.基本操作
        • 1.初始化
        • 2.判空
        • 3.入队(循环队列)
        • 4.出队
        • 5.读队头
      • 2.判断队列已满/已空
    • 3.队列的链式存储
      • 1.基本操作(带头结点)
        • 1.初始化
        • 2.判空
        • 3.入队
        • 4.出队
        • 5.队满条件
    • 4.双端队列
      • 1.输入受限的双端队列
      • 2.输出受限的双端队列

    1.队列的定义

    队列( Queue)是只允许在一端进行插入,在另一端删除的线性表。
    特点:先进入队列的元素先出队。(先进先出)First ln First Out ( FIFO)

    1.重要术语

    ①队头:允许册除的一端。
    ②队尾:允许插入的一端。
    ③空队列

    2.基本操作

    1. InitQueue(&Q):初始化队列,构造一个空队列Q。
    2. DestroyQueue(&Q):销毁队列。销毁并释放队列Q所占用的内存空间。
    3. EnQueue(&Q,x):入队,若队列Q未满,将x加入,使之成为新的队尾。
    4. DeQueue(&Q,&x):出队,若队列Q非空,删除队头元素,并用x返回。
    5. GetHead(Q,&x):读队头元素,若队列Q非空,则将队头元素赋值给x。
    6. QueueEmpty(Q):判队列空,若队列Q为空返回true,否则返回false。

    2.队列的顺序存储

    用静态数组存放数据元素,设置队头/队尾(front/rear)指针。

    ①rear:指向队尾元素的后一个位置(下个应该插入的位置)
    ②front:指向队头元素。

    在这里插入图片描述

    1.基本操作

    1.初始化

    在这里插入图片描述

    2.判空

    在这里插入图片描述

    3.入队(循环队列)

    在这里插入图片描述

    模运算将无限的整数域映射到有限的整数集合{0,1,2,…, b-1}上,将存储空间在逻辑上变成了“环状”。
    因此将这种存储空间在为环状的队列称为循环队列。

    在这里插入图片描述

    循环队列已满的条件:队尾指针的再下一个位置是队头,即 ( Q . r e a r + 1 ) % M a x S i z e = = Q . f r o n t (Q.rear+1)\%MaxSize==Q.front (Q.rear+1)%MaxSize==Q.front.
    代价:牺牲一个存储单元。

    4.出队

    在这里插入图片描述

    5.读队头

    在这里插入图片描述

    2.判断队列已满/已空

    ①使用模运算的方式:
    计算队列元素个数: ( r e a r + M a x S i z e − f r o n t ) % M a x S i z e (rear+MaxSize-front)\%MaxSize (rear+MaxSize−front)%MaxSize
    队列已满的条件:队尾指针的再下一个位置是队头,即 ( Q . r e a r + 1 ) % M a x S i z e = = Q . f r o n t (Q.rear+1)\%MaxSize==Q.front (Q.rear+1)%MaxSize==Q.front.

    ②在队列的结构体定义中加入一个size变量记录当前队列的长度
    插入成功size++;
    删除成功size–;

    ③结构体中设置一个标记变量tag,记录最近一次操作为删除或者插入
    每次删除操作成功时,都令tag=0;
    每次插入操作成功时,都令tag=1;
    只有删除操作,才可能导致队空。
    只有插入操作,才可能导致队满。
    队满条件: f r o n t = = r e a r & & t a g = = 1 front == rear \&\& tag == 1 front==rear&&tag==1
    队空条件: f r o n t = = r e a r & & t a g = = 0 front == rear \&\& tag ==0 front==rear&&tag==0

    3.队列的链式存储

    在这里插入图片描述

    1.基本操作(带头结点)

    1.初始化

    在这里插入图片描述

    2.判空

    在这里插入图片描述

    3.入队

    在这里插入图片描述

    4.出队

    在这里插入图片描述

    5.队满条件

    链式存储:一般不会队满,除非内存不足。

    4.双端队列

    只允许从两端插入、两端删除的线性表。
    在栈中合法的输出序列,在双端队列中必定合法。

    在这里插入图片描述

    1.输入受限的双端队列

    允许从两端删除、从一端插入的队列。

    2.输出受限的双端队列

    允许从两端插入、从一端删除的队列。

  • 相关阅读:
    【洛谷P2024】食物链【种类并查集】
    【数据结构】二叉树详解
    2020 CCF非专业级别软件能力认证第一轮(LGR-10)洛谷模拟试题试卷
    二维列表对应一维列表的内容子串查询,并返回下标
    20 行代码!带你快速构建基础文本搜索引擎 ⛵
    git修改默认分支
    基于AR增强现实模拟离心泵结构拆装与运行
    Mysql 并发多版本控制MVCC
    5、Nginx 配置实例-负载均衡
    创建 NFT 市场需要多少钱:解释与实践
  • 原文地址:https://blog.csdn.net/qq_61888137/article/details/134277751
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号