数据结构(队列Queue)

文章目录

  • 一、队列
    • 1、队列的定义
    • 2、队列的顺序实现
      • 2.1、初始化
      • 2.2、入队
      • 2.3、出队
      • 2.4、查找
      • 2.5、判断队列 满/空
    • 3、队列的链式实现
      • 3.1、初始化
      • 3.2、入队
      • 3.3、出队
    • 4、双端队列

一、队列

1、队列的定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、队列的顺序实现

在这里插入图片描述

在这里插入图片描述

2.1、初始化

在这里插入图片描述

//初始化
void InitQueue(SqQueue &Q){Q.front=Q.rear=0;
} 
//判断是否为空
bool QueueEmpty(SqQueue Q){if(Q.front==Q.rear)return false;else return true; 
} 

2.2、入队

在这里插入图片描述

队列已经满了的判断条件
队列已满的条件:rear==MaxSize ???
在这里插入图片描述

bool EnQueue(SqQueue &Q,int x){//判断队列是否已满if((Q.rear+1)%MaxSize==Q.front)return false;Q.data[Q.rear]=x;Q.rear=(Q.rear+1)%MaxSize;return true;
}

形成循环队列

2.3、出队

在这里插入图片描述

bool BeQueue(SqQueue &Q,int &x){if(Q.front==Q.rear)return false;x=Q.data[Q.front];Q.front=(Q.front+1)%MaxSize;return true;
} 

2.4、查找

bool GerHead(SqQueue Q,int &x){if(Q.front==Q.rear)return false;x=Q.data[Q.front];return true;
} 

队列中的元素个数
(rear+MaxSize-front)%MaxSize
在这里插入图片描述

2.5、判断队列 满/空

定义一个size,满是size=MaxSize,空是size=0
请添加图片描述
定义一个tag,删除操作tag=0,插入操作tag=1,判断,

队满:front==rear&&tag==1,队空:front==rear&&tag==0

请添加图片描述
两种对尾指向的方式
在这里插入图片描述
牺牲一个空间,判断对满,还是队空
在这里插入图片描述
在这里插入图片描述

3、队列的链式实现

在这里插入图片描述

在这里插入图片描述

3.1、初始化

在这里插入图片描述

void InitQueue(LinkQueue &Q){Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));Q.front=NULL;
} 

3.2、入队

在这里插入图片描述

void EnQueue(LinkQueue &Q,int x){LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode));s->data=x;s->next=NULL;Q.rear->next=s;Q.rear=s; 
}

在这里插入图片描述

3.3、出队

在这里插入图片描述
在这里插入图片描述

4、双端队列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql之基本查询

基本查询 一、SELECT 查询语句 一、SELECT 查询语句 查询所有列 1 SELECT *FORM emp;查询指定字段 SELECT empno,ename,job FROM emp;给字段取别名 SELECT empno 员工编号 FROM emp; SELECT empno 员工编号,ename 姓名,job 岗位 FROM emp; SELECT empno AS 员工编号,ename …

Python爬虫解析库安装

解析库的安装 抓取网页代码之后,下一步就是从网页中提取信息。提取信息的方式有多种多样,可以使用正则来提取,但是写起来相对比较烦琐。这里还有许多强大的解析库,如 lxml、Beautiful Soup、pyquery 等。此外,还提供了…

【开源】JAVA+Vue.js实现电子元器件管理系统

目录 一、摘要1.1 项目简介1.2 项目录屏 二、研究内容三、界面展示3.1 登录&注册&主页3.2 元器件单位模块3.3 元器件仓库模块3.4 元器件供应商模块3.5 元器件品类模块3.6 元器件明细模块3.7 元器件类型模块3.8 元器件采购模块3.9 元器件领用模块3.10 系统基础模块 四、…

java自动化之创建自动化框架项目(第一天)

1.前言 idea版本为2023.2 java版本为17.0.9 技术栈: javase:封装、泛型、反射、jdbc等 testng:开源测试框架,是从Junit继承而来 httpclient:java提供的与服务端http接口进行交互的库 fastjson:处理js…

分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SCN-Adaboost随机配置网…

04.对象树

一、引入 1.QT实现输出"hello world" 使用QT编写"hello world"程序,有两种实现方式: (1)直接在生成的ui文件中,拖入一个label控件,双击控件编辑内容即可实现 (2&#xff0…

RK3568 Android 13 系统裁剪

android 13 系统裁剪是个大工程,裁剪也是需要大量的测试,才能保证系统的稳定性,以下是RK官方给出的裁剪方案,有兴趣的可以去看一下,对裁剪不是要求过高的可以根据官方的建议,对系统进行裁剪: Rockchip And…

wpf 数据转换(Bytes 转 KB MB GB)

效果 后端 using ProCleanTool.Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Data;namespace P…

交叉编译opencv运行平台rk3588

opencv版本:4.8.0 opencv_contrib版本:4.8.0 在源码目录下建build目录,进入该目录配置编译选项生成makefile cmake 配置参数: cmake -DCMAKE_MAKE_PROGRAM:PATH/usr/bin/make -DCMAKE_INSTALL_PREFIX/home/rog/my_file/other_L…

uniapp H5 实现上拉刷新 以及 下拉加载

uniapp H5 实现上拉刷新 以及 下拉加载 1. 先上图 下拉加载 2. 上代码 <script>import DragableList from "/components/dragable-list/dragable-list.vue";import {FridApi} from /api/warn.jsexport default {data() {return {tableList: [],loadingHi…

Docker私有仓库搭建

目录 搭建本地私有仓库 Docker--harbor私有仓库部署与管理 Harbor 简介 什么是Harbor Harbor的特性 Harbor的构成 Harbor 部署 部署 Docker-Compose 服务 ​编辑部署 Harbor 服务 启动 Harbor 进入浏览器http://192.168.20.10进入harbor的客户端 搭建本地私有仓库 …

大数据学习之Redis、从零基础到入门(三)

目录 三、redis10大数据类型 1.哪十个&#xff1f; 1.1 redis字符串&#xff08;String&#xff09; 1.2 redis列表&#xff08;List&#xff09; 1.3 redis哈希表&#xff08;Hash&#xff09; 1.4 redis集合&#xff08;Set&#xff09; 1.5 redis有序集合&#xff08…