数据结构的概念大合集04(队列)

概念大合集04

  • 1、队列
    • 1.1 队列的定义
    • 1.2队列的顺序存储
      • 1.2.1 顺序队
      • 1.2.2 顺序队的基本运算的基本思想
      • 1.2.3 顺序队的4要素的基本思想
    • 1.3 环形队列
      • 1.3.1 环形队列的定义
      • 1.3.1 环形队列的实现
    • 1.4 队列的链式存储
      • 1.4.1 链队
      • 1.4.2 链队的实现方式
      • 1.4.3 链队的4要素的基本思想
    • 1.5 双端队列

1、队列

1.1 队列的定义

  • 队列限制为仅允许在表的一旦进行插入操作,而在表的另一端进行删除操作。
  • 将进行插入的一端称为队尾,进行删除的一端称为队头或对首。
  • 将插入新元素称为入队或进对。
  • 将删除元素称为出队或离队。

队列的特点是:先进队的先出队,即先进先出表(first in first out,FIFO)

1.2队列的顺序存储

1.2.1 顺序队

采用顺序存储的列表称为顺序队
请添加图片描述

1.2.2 顺序队的基本运算的基本思想

函数名函数作用
InitQueue(&q)初识化队列,构造一个空队列
DestroyQueue(&q)销毁队列,释放为队列q分配的内存空间
QueueEmpty(q)判断队列是否为空表,若L为空队列,则返回true,否则返回false
enQueue(&q,e)进队列,将元素e插入作为对尾元素。
deQueue(&q,e)出队列,从队列q中出队一个元素,并将其赋值给e

1.2.3 顺序队的4要素的基本思想

请添加图片描述

  • 空队:q -> front == q -> rear;
  • 队满:q -> rear == MaxSize - 1;
  • 进队:先将rear增1,然后将元素e放在data数组的rear位置。即data[++rear] = e;
  • 出队:先将front增1,然后取出data数组中front位置的元素。即e = data[++front];

1.3 环形队列

1.3.1 环形队列的定义

       环形队是顺序队的衍生。

       衍生原因,由上面的基本思想可知,队满的情况是q -> rear == MaxSize - 1,而队列的出队,是从队头出队,当出队两次后,队列空出两个元素,但是这时候,仍旧是q -> rear == MaxSize - 1,所以会出现假队队满的情况。为避免这种情况,于是就衍生出环形队列,这种特殊的队列。

       所以将顺序队的前后端连接起来就形成了环形队列

1.3.1 环形队列的实现

环形队列相连后,当队尾指针rear = MaxSize - 1后,再前进一个位置到0,让 rear == 0,即从队尾变成队头,为此,可采用求余(%)运算来实现:
队尾指针rear从队尾指向队头,形成循环:rear = (rear + 1)%MaxSize
同理:队头指针front循环增1:front = (front + 1)%MaxSize

1.4 队列的链式存储

1.4.1 链队

采用链式存储结构的队列
采用单链表的方式实现链队

1.4.2 链队的实现方式

链队的实现方式与链表不同,链队的头结点,存放两个指针,一个指向队首结点,一个指向队尾结点,而里面的数据结点还是与单链表相同,存在一个数据域和一个指针域
请添加图片描述

1.4.3 链队的4要素的基本思想

  • 队空:q->rear == NULL || q->front == NULL;
  • 队满:不考虑
  • 进队:新建一个结点存放元素,将其作为尾结点插入
  • 出队:取出队首结点的data值,并将其删除

1.5 双端队列

指的是两端都可以进行进队和出队的操作的队列
请添加图片描述
进队时,从前端进的元素排列在从后端进的元素的前面;
出队时,无论是从前端出还是从后端出,都是先出的元素排列在后出的元素前面。

注:
本文将主要探讨队列的概念,其中提及的各个函数操作已经发布,欢迎朋友们继续观看。

本篇文章的相关算法
数据结构大合集04——队的相关函数运算算法

上一篇文章
数据结构的概念大合集03(栈)

下一篇文章
数据结构的概念大合集05(串)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/463924.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

双指针 | 移动零 | 复写零

1.移动零 题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]解题思路: right指针一直往后移动,当…

Java实现简单的通讯录

每日一言 泪眼问花花不语,乱红飞过秋千去。 —欧阳修- 简单的通讯录实现,跟写Java实现图书管理系统差不多,用到的知识也差不多,就当个小练习,练习一下写Java程序的手感。 Java实现图书管理系统 关于通讯录的代码都写…

【JVM】(内存区域划分 为什么要划分 具体如何分 类加载机制 类加载基本流程 双亲委派模型 类加载器 垃圾回收机制(GC))

文章目录 内存区域划分为什么要划分具体如何分 类加载机制类加载基本流程双亲委派模型类加载器 垃圾回收机制(GC) 内存区域划分 为什么要划分 JVM启动的时候会申请到一整个很大的内存区域,JVM是一个应用程序,要从操作系统这里申请内存,JVM就需要根据,把…

Android Studio字体大小调节

外观页面字体调节 settings->Appearance->User cunstom font 代码字体调节 Settings->Editor->Font此时logcat窗口、Build窗口和Ternimal窗口字体大小也会同步调节(2023.2.1版本上验证)

基于Springboot和Redis实现的快递代取系统

1.项目简介 本项目基于springboot框架开发而成,前端采用bootstrap和layer框架开发,系统功能完整,界面简洁大方,比较适合做毕业设计使用。 本项目主要实现了代取快递的信息管理功能,使用角色有三类:一是客…

Elasticsearch 主副分片切换过程中对业务写入有影响吗

🍊🍉🍋 先说下结论,只要集群中的工作节点过半,有候选的master节点,挂掉的节点中不同时包含索引的主分片和副分片,那么ES是可以做到让业务无感知的进行主副分片切换的。 蓝胖子会先讲解下ES集群写…

ARM_基础之RAS

Reliability, Availability, and Serviceability (RAS), for A-profile architecture 源自 https://developer.arm.com/documentation/102105/latest/ 1 Introduction to RAS 1.1 Faults,Errors,and failures 三个概念的区分: • A failure is the event of devia…

外包干了3天,技术明显进步。。。。。

先说一下自己的情况,本科生,19年通过校招进入南京某软件公司,干了接近2年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

16、技巧之九: 修改参数,如何让表格翻页滚动到底部?【Selenium+Python3网页自动化总结】

1、问题提出 在网页配置参数时,输入参数名称搜索,搜出来的同名参数结果有多个,分布在一个表格的不同行,表格是动态加载的,需要滚动鼠标才能把所出参数找出来。用selenium怎么实现这种参数修改? 2、网页元素…

JVM学习-JVM的自动优化

目录 1.语法糖 1.1默认构造器 1.2自动拆装箱 1.3泛型集合取值 1.4可变参数实现 1.5 foreach循环 1.6 switch配合String使用 1.7 switch配合枚举使用​编辑 1.8 try-with-resources 1.9方法重写的桥接方法 2.运行时优化 2.1分层优化以及逃逸分析 2.2方法内联 2.3字段优化 JVM会…

产品推荐 - 基于FPGA XC7K325T+DSP TMS320C6678的双目交汇视觉图像处理平台

一、产品概述 TES601是一款基于FPGA与DSP协同处理架构的双目交汇视觉图像处理系统平台,该平台采用1片TI的KeyStone系列多核浮点/定点DSP TMS320C6678作为核心处理单元,来完成视觉图像处理算法,采用1片Xilinx的Kintex-7系列FPGA XC7K325T作为视…

​​SQLiteC/C++接口详细介绍之sqlite3类(十)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(九) 下一篇:​​SQLiteC/C接口详细介绍之sqlite3类(十一) 30.sqlite3_enable_load_extension&#x…

三、NLP中的句子关系判断

句子关系判断是指判断句子是否相似,是否包含,是否是问答关系等,常应用在文本去重、检索(用户输入和文档的相关性)、推荐(和用户喜好文章是否相似)等场景中。 3.0、文本相似度计算 3.0.0 传统机…

更改el-tabs默认样式,实现tab标签居中显示,标签对应内容使用另一个div显示

首先看效果图 如图所示&#xff0c;标签在浏览器窗口居中&#xff0c;但是下面的内容依然是默认从左到右&#xff0c;不会受到tab样式的影响 <template><div><div style"display: flex; justify-content: center; align-items: center;"><el-…

JVM学习-JVM简介以及其内部结构

目录 1.什么是JVM 2.JVM、JRE、JDK、JavaSE、JavaEE之间的联系 3.JVM的内部结构 4.各部分的作用 4.1 类加载器 4.2 方法区 4.3 堆 ​编辑 4.4 虚拟机栈 4.5 程序计数器 4.6 本地方法栈 4.7 解释器和JIT即时编译器 4.9 GC垃圾回收 5.拓展 5.1一些可能会遇到的问…

Mysql 死锁案例4-delete 相邻记录导致死锁

死锁复现 CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),KEY c (c) ) ENGINEInnoDB DEFAULT CHARSETutf8;/*Data for the table t */insert into t(id,c,d) values (0,0,0),(5,5,5),(10,10,10),(15,15,15) 事务1事…

C语言初学12:强制类型转换

一、强制数据类型转换举例 1.1 double赋值给int #include<stdio.h> int main() {double sum 18, count 5;int mean;mean sum / count;printf("Value of mean : %d\n", mean);} 执行结果&#xff1a; double赋值给int&#xff0c;小数部分会删除&#xff…

dp入门:从暴力dfs 到 dp

本篇为小金鱼大佬视频的学习笔记&#xff0c;原视频链接&#xff1a;https://www.bilibili.com/video/BV1r84y1379W?vd_source726e10ea5b787a300ceada715f64b4bf 基础概念 暴力dfs很多时候仅能过部分测试点&#xff0c;要想将其优化&#xff0c;一般以 dfs -> 记忆化搜索 …

汽车IVI中控开发入门及进阶(十三):语音识别

前言: IVI中控上的语音识别,在目前市场上也是非常显眼的一个创新,大幅改变了传统IVI的操作习惯。 语音识别Speech recognition,也称为自动语音识别(ASR)、计算机语音识别或语音到文本,是一种使程序能够将人类语音处理成书面格式的能力。 语音识别Speech recognition是计…

1.6w字数据库基础知识超详细解析~‍(进阶/复习版)

文章目录 前言一、数据库的操作1.登入数据库2.创建数据库3.显示当前数据库4.使用数据库5.删除数据库 二、常用数据类型三、数据库的约束1约束类型2NULL约束3UNIQUE:唯一约束4DEFAULT&#xff1a;默认值约束5 PRIMARY KEY&#xff1a;主键约束6 FOREIGN KEY&#xff1a;外键约束…