数据结构|队列

2023-05-16

队列

  • 知识框图
  • 考点分析
    • 1、什么样的链表适合作为链队
    • 2、判空判满
  • 常考小题

知识框图

队列

队列相关知识点较为简单易懂,不再叙述。(注意【FIFO】特点,框架遗漏)
本文主要针对考点中的2、3点进行知识总结,以及知识框图中遗漏的一个小考点【求队列的长度】,参考资料《王道数据结构》及《数据结构》严蔚敏版。

考点分析

1、什么样的链表适合作为链队

分析:根据队列“队头删除、队尾插入”易知,必需要有队头和队尾的指针(头指针和尾指针)。链队列的操作可以看作是单链表的插入和删除的特殊情况:只需要更改头指针尾指针。由此,我们所用的链表必须是可以直接拿到队首和队尾的结点的指针

应用
Q1:最适合用作链队的链表是()
A、带队首指针和队尾指针的循环单链表
B、带队首指针和队尾指针的非循环单链表
C、只带队首指针的非循环单链表
D、只带队首指针的循环单链表

A1: 选择:B

队列需要在两端进行,需要能直接拿到队首和队尾指针,所以可以首先排除C和D。
选项A,循环单链表双向,在进队出队需要修改指针,使其回到原本的循环,可以实现队列的操作,但是很麻烦,“画蛇添足”。
选项B,可以在头删除、尾插入,符合

Q2:最不适合用作链式队列的链表是()
A、只带队首指针的非循环单链表
B、只带队首指针的循环双链表
C、只带队尾指针的循环单链表
D、只带队尾指针的循环单链表

A2: 选择:A

A项中,只带队首指针,如果要在队尾进行操作的话需要遍历单链表。显然不适合两端操作的队列。

2、判空判满

分析:类比栈的操作,可以知道,如果指针指向当前,那么就应该先移指针再入值(如图1);如果当前所指是上一个(后一个),那么可以先入值再移指针(如图2)。

在这里插入图片描述

由此我们类比到队列中,若初始时font=0,rear=n-1,则入队时应该先队尾指针后入值。基于如上,便于我们判断队列的空/满。

如图,为顺序存储时队空和队满的情况

由图易知,当rear= =front= =0时队空,但是队满情况需要注意,当rear达到maxsize时,不一定队满(如图中第三个),这就导致一种“假溢出”,为此,我们想到采用循环的方式进行判满。

在这里插入图片描述

图中所示是采用牺牲一个单元来区分队空和队满的方法:
队空:rear= =front
队满:队头指针在队尾指针的下一位置(rear+1)%maxsize= =front。
倘若不空出一个,队空和队满的都是rear= =front,为区分是队空导致的rear= =front,还是队满,有以下两种办法:
1、借助一个变量length,来记录此时队列的长度,length= =0,显然是队空
2、增设一个tag数据成员,若执行入队,tag=1;若执行出队,tag=0

注意,若初始front=0,rear=maxsize-1, 那么判空条件应该是**(rear+1)%maxsize= = front**

链式队列分有带头和不带头两种,不带头结点判空显然是front= =null。带头结点如图,其判空条件应为front==rearl

在这里插入图片描述

链式队列适合数据元素变动比较大的情形,而且不存在队列满且溢出的问题。

*Q1:*假设一个循环队列Q[MaxSize]的队头指针为front,队尾指针为rear,队列的最大容量为Maxsize,此外,该队列没有其他数据成员,则判断该队列的队满条件是________

*A1:*没有其他数据成员说明采用“牺牲一个单元”方法,队满条件,队头在队尾指针的下一个位置,故答案为:
Q.front= =(Q.rear+1)%MaxSize

Q2:循环队列放在一维数组A[0…M-1]中,end1指向队头元素,end2指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳M-1个元素。初始时为空。
则其队空条件为:________________
队满条件为________________

*A2:*队空显然是end1= =end2
因为最多容纳M-1个元素,故队满时,队头下标为0,队尾下标为M-2,end1指向队头,end2指向队尾的后一个位置。推出队满条件为:end1= =(end2+1)mod M

Q3: 循环队列的队头和队尾指针分别是front、rear,约定队头指针指示队列中队头元素的当前位置,队尾指针指示队列中队尾元素的当前位置的下一位置,容量为MAXSIZE的队列满的条件是(rear +1)%MAXSIZE = = front,则判断队列为空的条件是__________

A3: rear = = front

常考小题

Q1:【武汉大学·2011·计算机基础】设环形队列中数组的下标是0~N-1,其头尾指针分别是f和r(其中f指向队头元素的前一个位置,r指向队尾元素的位置),则其元素的个数为__________

插入一个元素,rear就会顺时针移动一位
删除一个元素,front就会顺时针移动一位
由此可推断元素个数为:(r-f+N)%N

Q2:【湖南大学·2006·数据结构】单循环链表表示的队列长度为n,若只设头指针,则进队的时间复杂度为__________

队列的特点:先进先出
单链表的特点:迭代的时候向前,不能回头
在只知道头指针的情况下,入队,要先遍历单链表,找到尾指针,然后进行插入,遍历过程时间复杂度为O(n)。故答案为O(n)

Q3:【武汉大学·2015·计算机基础】设有顺序数组(最大容量为maxsize)存储某循环队列Q,用front(队首元素的下标)与count(队列中元素个数)来标记该队列,假设当前count<maxsize,则以下语句可以完成新元素e入队的操作为__________

答案:
Q->data[Q->front+Q->count)%maxsize]=e;
Q->count++;
由于是循环队列,所以在插入数据的时候需要%maxsize,count需要加1

Q4:若用一个不带头结点的循环单链表表示队列,则最好用_____标识链队
A、首结点指针
B、尾结点指针
C、首结点和尾结点两个指针
D、任何结点指针

答案:B
非循环单链表和带头指针的循环单链表查找尾结点的时间效率是O(n)【这点在链表题目中也总是变相考察】,而带尾指针的循环链表查找首尾结点的时间效率是O(1),查找和更改时只需要修改指针,无需遍历,队列的操作实际上就是对链表首尾结点的操作。

【下次再更~】
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构|队列 的相关文章

  • vscode配置ros开发环境

    前言 xff1a 其实有两种方法来配置vscode里的ros环境 xff0c 第一种就是先通过终端创建工作空间 xff0c 并编译后然后选择vscode打开catkin ws xff0c 然后在vscode中配置ros的编译环境 xff1b
  • 判断IP地址是否在同一个网段

    一 什么是子网掩码 xff1f 在了解ip地址的网段之前 xff0c 我们先来了解子网掩码 xff0c 很多对网络了解不深的朋友都对子网掩码有些迷惑 xff0c 不了解它是用来干什么的 xff1f 子网掩码不能单独存在 xff0c 它必须结
  • 理解MySQL七种连接

    如上图是MySQL的七种连接 由于MySQ对于外连接支持SQL99语法 xff0c 我们就以JOIN ON举例 表t dept 表t emp 1 内连接 xff1a A表 xff0c B表交叉的部分 SELECT FROM t dept d
  • IP地址的分类和规划

    每日分享 xff1a 你拼命奔跑的样子 xff0c 终究会在风中留下痕迹 xff01 文章目录 一 IP地址的格式二 私有IP地址三 IP地址分类 xff1a 四 子网掩码五 IP地址的规划 一 IP地址的格式 1 主机唯一的标识 xff0
  • QT5+TCP/IP多线程传输图片

    先上实现结果 一 概述 QT中设计TCP IP通信主要使用QTCPServer和QTCPSocket两个类 xff0c 功能分为服务器端和客户端 xff0c 服务器端负责接收图片 xff0c 客户端发送图片 多线程设计主要有两种方法 xff
  • ubuntu建立新用户

    1 新建testuser用户 sudo adduser testuser 2 设置root密码 sudo passwd root 3 更改sudoers编辑权限 sudo chmod u 43 w etc sudoers 4 给testus
  • Error: Flash Download failed - “Cortex-M3“错误解决办法

    在使用STM32F103的时候 xff0c 使用DAP仿真器下载程序 xff0c 出现下载不了的情况 xff0c 错误信息如下 xff1a 输出框里打印信息如下 xff1a No Algorithm found for 08000000H
  • 浏览器自定义滚动条样式

    当一段文本过长 xff0c 使用overflow auto属性后 xff0c 这段文本所在区域将会出现滚动条 有时候 xff0c 我们需要自定义浏览器的滚动条样式 xff0c 可以使用css3的scrollbar thumb属性来实现 首先
  • linux rpm安装讲解

    1 安装rpm安装包 rpm ivh rpm 2 删除rpm安装包 rpm evv rpm 注意 xff1a 使用 e不能完全删除
  • Linux多进程/线程编程之【fork()和exec()】

    目录 一 fork系统调用创建子进程 1 1 为什么要创建子进程 1 2 fork系统调用的内部原理 1 3 关于子进程 1 4 线程和fork 二 exec族函数及实战 2 1 为什么需要exec族函数 2 2 exec族的6个函数介绍
  • 基于STM32的USART、UART串口命令调制和解析(加密与解密)

    基于STM32的USART UART串口命令调制和解析 xff08 加密与解密 xff09 采用芯片为STM32F407ZG 调制后的命令采用USART1往外发送 发送至USART2 而后USART2接收命令后 进行解析 把命令中有用的部分
  • 【STM32笔记】晶振及旁路电容设计避坑(低速外部晶振LSE无法起振的可能原因)

    STM32笔记 晶振及旁路电容设计避坑 xff08 低功耗低速外部晶振LSE无法起振的可能原因 xff09 晶振无法起振 无非就是旁路电容设计的有问题 一般旁路电容选10pF 12pF 20pF等等 都没啥问题 尤其是高速晶振 基本不会出问
  • ROS-CAN通信解析程序分析(ROS中进行CAN通信)

    CANALYST II的linux版本通信解析程序 我们解析程序的先后顺便为 xff1a open xff0c 打开can卡 xff1b initcan xff0c 对can卡进行初始化 xff1b start xff0c 启动can通道
  • ARM架构服务器安装docker

    我的服务器信息为 Linux ecs 1bc7 0001 4 19 90 17 5 ky10 aarch64 1 SMP Fri Aug 7 13 35 33 CST 2020 aarch64 aarch64 aarch64 GNU Lin
  • 深度学习-虚拟机当服务器的安装环境

    下载 Anaconda 清华大学开源软件镜像站 服务器端 1 Anaconda安装 将下载好的文件放在系统文件夹下 xff0c 然后输入bash Anaconda3 5 3 1 Linux x86 64 sh进行安装 注意 xff1a 对应
  • HTTP报文详解

    HTTP报文详解 目录 1 HTTP请求报文 2 HTTP响应报文 3 请求方法 4 消息头 4 1 请求消息头 4 2 响应消息头 5 状态码 5 1 1XX消息 5 2 2XX成功 5 3 3XX重定向 5 4 4XX客户端错误 5 5
  • FGSM论文阅读笔记

    文献原文 xff1a http arxiv org abs 1412 6572 引言 一些神经网络会错误的分类对抗样本 xff08 通过对数据集中的例子使用小但故意最坏情况的扰动形成的输入 xff09 xff0c 受扰动的输入会导致模型输出
  • CAN数据帧结构图解分析

    CAN数据帧的数据位结构主要包括以下几个部分 xff1a 起始位 xff08 Start of Frame xff0c SOF xff09 xff1a 1位 xff0c 用于标识一个CAN数据帧的开始 xff0c 其值为低电平 xff08
  • Android NDK 为什么要 extern “C”

    由于C 43 43 函数支持重载 xff0c 就是一个C 43 43 函数 xff0c 可以有不同的参数个数和类型 xff0c 编译后函数名会变 为了避免ndk load 的C C 43 43 库的时候找不到这个函数 xff0c 索性都用
  • linux 基础命令讲解--加密解密

    加密文件 xff1a 1 MD5 echo n 34 string 34 openssl md5 加密字符串 openssl md5 in test txt 加密文件 2 BASE64 echo 34 string 34 openssl b

随机推荐

  • 阿里云服务器(centos)如何远程连接?

    阿里云服务器 xff08 centos xff09 远程连接也有两种方法 xff0c 一种是直接在网页上远程连接 xff1b 另外一种是在本地远程连接 下面会把两种方法都说下 第一种 xff1a 直接在网页上远程连接 首先登陆阿里云账号 x
  • 阿里云服务器(Windows)远程连接后不显示桌面是为什么?

    有些人买了阿里云服务器 xff08 Windows xff09 远程连接后的界面是下图中这样的 没有我们平时看到的界面 xff0c 所以就不知道该怎么操作 xff0c 那么该怎么解决这个问题呢 xff1f 想知道怎么解决的话就要知道为什么会
  • Ubuntu18.04安装realsense d435i SDK和ROS Wrapper以及相机标定全过程

    第一步 xff1a 安装realsense SDK 1 用源码进行安装 xff1a https github com IntelRealSense librealsense 然后将下载的源码安装包放在文件夹下面 xff0c 我把文件夹放在了
  • 基于Android的智能求职招聘APP设计与实现

  • (一)华为弹性云服务器购买与使用

    登录华为云官网 选择立即购买 选择配置并购买 根据需要进行购买 华北 北京四按需计费随机分配GPU加速型g6 4xlarge 4Ubuntu 18 04 server 64bit for GPU 40GB xff08 需要GPU的选有GPU
  • C++继承和多态核心重点知识刨析,一文必拿下

    一 继承 继承的本质是为了复用 xff0c 复用基类的数据成员和方法 封装的本质是为了对外仅仅暴露必要的使用接口 内部的具体实现细节和部分的核心接口对外是不可见的 隐藏细节 仅对外开放必要功能性接口 正是由于封装隐藏所需 所以产生了公有属性
  • DockerFile文件详细解析

    DockerFile文件详细解析 所有文章不设限 xff0c 我们相遇偶然 xff0c 相散坦然 xff0c 互不打扰 xff0c 各自安好 xff0c 向阳而生 致敬尚硅谷周阳老师 xff0c 此处内容迁移学习来自于阳哥 xff01 Do
  • Cropper的一个demo

    1 摸鱼大法第一招 Cropper Cropper 就是基于canvas做的小插件 xff0c 下面做的是一个图片裁剪 xff0c 各位看官看看就行 xff0c 有什么意见多提 A code block import Cropper fro
  • 互斥锁和信号量

    一 同步互斥概述 在多任务操作系统中 xff0c 同时运行的多个任务可能都需要访问 使用同一种资源 多个任务之间有依赖关系 xff0c 某个任务的运行依赖于另一个任务 同步和互斥就是用于解决这两个问题的 互斥 一个公共资源同一时刻只能被一个
  • shell编程、makefile学习笔记

    windows r n linux n 1 shell介绍 1 1 shell是操作系统的终端命令行 1 shell可以理解为软件系统提供给用户操作的命令行界面 xff0c 可以说它是人机交互的一种方式 2 我们可以使用shell和操作系统
  • linux系统--find命令详解以及定时查看系统文件是否被修改

    一 概述 xff1a 因为Linux下面一切皆文件 xff0c 经常需要搜索某些文件来编写 xff0c 所以对于linux来说find是一条很重要的命令 linux下面的find指令用于在目录结构中搜索文件 xff0c 并执行指定的操作 它
  • 0429 嵌入式学习笔记 (32)STL标准模板库/类的方法

    文章目录 STL 标准模板库 类的方法 STL 标准模板库 从逻辑层面看 xff0c 在STL中体现了泛型化程序设计思想 从实现层次看 xff0c 整个STL是以一种类型参数化的方式实现的 STL六大组件 1 容器 2 迭代器 3 算法 4
  • Mapreduce(Java程序编写)

    Mapreduce xff1a 分布式计算框架 开发人员要做的事情 xff1a 实现Map和Reduce函数 一般只调用HDFS的话 xff0c 不实际Yarn的工作 xff0c 调用Mapreduce时才会调用yarn 三台设备Mapre
  • 蓝桥杯嵌入式(STM32G431RBT6)入门第二天——建立自己的初始化文件|CSDN创作打卡

    接前一天 xff0c 将所有工程拷贝到建立的另外一个文件夹LED中 xff0c 在Inc文件夹中建立led h文件 xff0c 在Src文件夹中建立led c 用keil打开工程 xff0c 点击下图中的图标 xff0c 新建一个USER分
  • 如何把img格式转换成vmdk格式

    下载qemu xff0c 这里是下载好的 xff0c 也可以自行下载 链接 xff1a https pan baidu com s 1UEJupO5YyFgX8MnpywikeA 提取码 xff1a ttil 安装好后 xff0c 进入qe
  • 瀑布流插件vue-masonry

    前言 之前其实有分享过一篇纯CSS实现瀑布流的方法 https oliver blog csdn net article details 126450691 xff0c 但纯CSS实现的方案都不是比较好的方案 xff0c 总归有一些各式各样
  • 集合学习之Iterator接口

    1 Iterator接口概述 Iterator接口表示对集合进行迭代的迭代器 Iterator接口为集合而生 xff0c 专门实现集合的遍历 此接口主要有如下两个方法 xff1a hasNext 判断是否存在下一个可访问的元素 xff0c
  • 自协商技术

    摘要 xff1a 本文介绍了自协商的基本原理和工作模式 xff0c 以及自协商相关细节介绍 缩略语 xff1a FLP xff1a 快速连接脉冲 NLP xff1a 普通连接脉冲 CSMA CD xff1a 载波监听多路访问 冲突检测 PC
  • Armbian 笔记五_如何在 Armbian 上安装 xfce4 桌面

    目录 使用 armbian software 选择 Desktop 安装 xfce4 桌面 准备工作 正常开机 必须存在着一个普通用户 连接有线网络 下载安装设置 armbian software 201 是 Desktop 输入普通用户
  • 数据结构|队列

    队列 知识框图考点分析1 什么样的链表适合作为链队2 判空判满 常考小题 知识框图 队列相关知识点较为简单易懂 xff0c 不再叙述 xff08 注意 FIFO 特点 xff0c 框架遗漏 xff09 本文主要针对考点中的2 3点进行知识总