队列----数据结构

news/2024/4/29 5:50:50/文章来源:https://blog.csdn.net/T2697142573/article/details/129713927

在这里插入图片描述

队列

  • 🔆队列的概念
  • 🔆队列的结构
  • 🔆队列的实现
  • 🔆设计循环队列
    • 🔆循环队列的结构
    • 🔆循环队列的实现
  • 🔆结语

🔆队列的概念

  • 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)
  • 入队列:进行插入操作的一端称为队尾
  • 出队列:进行删除操作的一端称为队头

🔆队列的结构

在这里插入图片描述

🔆队列的实现

链式队列gitt代码链接

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。

在这里插入图片描述

🔆设计循环队列

🔆循环队列的结构

我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型时可以就会使用循环队列。环形队列可以使用数组实现,也可以使用循环链表实现。

在这里插入图片描述

通常空出来一个节点,不用来存放数据,用于判断队列的空和满。
在这里插入图片描述

🔆循环队列的实现

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <stdbool.h>
#include <assert.h>
#include <stdlib.h>typedef struct {int* a;int front;int rear;int k;
} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* cq = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));cq->a = (int*)malloc(sizeof(int) * (k + 1));cq->front = cq->rear = 0;cq->k = k;return cq;
}bool myCircularQueueIsEmpty(MyCircularQueue* obj) {assert(obj);return (obj->front == obj->rear);
}bool myCircularQueueIsFull(MyCircularQueue* obj) {assert(obj);return ((obj->rear + 1) % (obj->k + 1) == (obj->front));
}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {assert(obj);if (myCircularQueueIsFull(obj)) {return false;}obj->a[obj->rear++] = value;obj->rear %= (obj->k + 1);return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) {assert(obj);if (myCircularQueueIsEmpty(obj)) {return false;}obj->front++;obj->front %= (obj->k + 1);return true;
}int myCircularQueueFront(MyCircularQueue* obj) {assert(obj);if (myCircularQueueIsEmpty(obj)) {return -1;}else {return obj->a[obj->front];}
}int myCircularQueueRear(MyCircularQueue* obj) {assert(obj);if (myCircularQueueIsEmpty(obj)) {return -1;}else {return obj->a[((obj->rear) + (obj->k)) % ((obj->k) + 1)];}
}void myCircularQueueFree(MyCircularQueue* obj) {assert(obj);free(obj->a);obj->a = NULL;free(obj);
}

🔆结语

到这里这篇博客已经结束啦。
这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀

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

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

相关文章

5G、工业4.0、车载以太网……TSN时间敏感网络能给我们带来哪些市场机会?

TSN是一项面向未来的新兴技术&#xff0c;它定义了以太网数据传输的时间敏感机制&#xff0c;为标准以太网增加了确定性和可靠性&#xff0c;以确保数据实时、确定和可靠地传输。这些扩展使得以太网能够应用于更加广泛的行业中&#xff0c;进而带来了更多新的市场机会。 1. 5G…

电力行业等保定级评级依据是什么?分为几个等级?

最近看到不少电力行业小伙伴在问&#xff0c;电力行业等保定级评级依据是什么&#xff1f;分为几个等级&#xff1f;今天我们小编就来给大家简单回答一下&#xff0c;仅供参考哦&#xff01; 电力行业等保定级评级依据是什么&#xff1f;分为几个等级&#xff1f; 【回答】&a…

【2023.3.18 美团校招】

文章目录1. 小美剪彩带2. 最多修改两个字符&#xff0c;生成字典序最小的回文串1. 小美剪彩带 题意&#xff1a;找出区间内不超过k种数字子数组的最大长度 使用双指针的方式&#xff0c;用哈希表来统计每个数出现次数。在双指针移动的过程中&#xff0c;动态的维护区间内不同数…

bean的作用域和生命周期和后置处理器以及作用域对生命周期的影响~

scope属性可以指定bean的作用范围&#xff1a; 在spring中可以通过配置bean标签的scope属性来指定bean的作用域范围&#xff0c;各取值含义参照表如下&#xff1a; 编写spring_test.xml文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?> &…

Spring Quartz项目实现Job的动态控制

一、简单介绍 Quartz可以对job进行简单控制&#xff0c;但不支持分布式&#xff0c;也没有管理界面和任务分片&#xff0c;但使用起来比较简易。 二、创建简单Demo 我们开始简单使用一下&#xff0c;首先创建Demo&#xff0c;在pom文件中加入以下依赖。 <parent><g…

golang项目实战2023/03/21

初始化项目首先建立一个文件夹在文件夹下面建一个main.go文件执行初始化命令行go mod init page // page 为自己的项目名称 go mod tidy 安装框架 go get gorm.io/gorm // gorm go get gorm.io/driver/mysql // 这里是用的sql数据库 go get -u github.com/gin-gonic/gin // 这…

Numpy 广播域

NumPy广播(Broadcast)&#xff0c;广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式&#xff0c; 对数组的算术运算通常在相应的元素上进行。不同形状指的是&#xff0c;大小不同当然不是指的维度&#xff0c;但是要求数组各维度的长度相同例如&#xff1a;…

ICG-MAL,吲哚菁绿-马来酰亚胺,CAS:2143933-81-5,科研级别试剂

ICG-MAL,吲哚菁绿-马来酰亚胺 中文名称&#xff1a;吲哚菁绿-马来酰亚胺 英文名称&#xff1a;ICG-MAL 性状&#xff1a;粉末或固体 CAS&#xff1a;2143933-81-5 分子式&#xff1a;C51H56N4O6S 分子量&#xff1a;853.09 溶剂&#xff1a;溶于二氯甲烷等常规性有机溶…

【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(7)

目录 写在前面&#xff1a; 题目&#xff1a;P1596 [USACO10OCT]Lake Counting S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 解题思路&#xff1a; …

【技巧】十大深度学习技巧和经验总结

✅作者简介&#xff1a;在读博士&#xff0c;伪程序媛&#xff0c;人工智能领域学习者&#xff0c;深耕机器学习&#xff0c;交叉学科实践者&#xff0c;周更前沿文章解读&#xff0c;提供科研小工具&#xff0c;分享科研经验&#xff0c;欢迎交流&#xff01;&#x1f4cc;个人…

RocketMQ重复消费问题的原因

文章目录 概览消息发送异常时重复发送消费消息抛出异常消费者提交offset失败服务端持久化offset失败主从同步offset失败重平衡清理长时间消费的消息总结概览 消息发送异常时重复发送 首先,我们来瞅瞅RocketMQ发送消息和消费消息的基本原理。 如图,简单说一下上图中的概念: …

责任链设计模式的一次实践

业务需求 框架&#xff1a;SSH 需要对全部接口的响应体 ResponseBody 做 XSS 拦截 解决方案 在全局拦截器中检测 Response Body 是否有非法字符&#xff0c;如果有&#xff0c;就抛出异常。 实际上&#xff0c;在 struts2 的拦截器上&#xff0c;我发现 即使修改了 action…

yum安装docker以及安装指定版本docker

Docker是Docker.Inc公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发&#xff0c;并遵从Apache 2.0协议。通过分层镜像标准化和内核虚拟化技术&#xff0c;Docker使得应用开发者和运维工程师可以以统一的方式跨平台发布应用&#xff0c;并且以几乎没有…

在Java中,使用HttpUtils实现发送HTTP请求

HTTP请求&#xff0c;在日常开发中&#xff0c;还是比较常见的&#xff0c;今天给大家分享HttpUtils如何使用。 阅读本文&#xff0c;你将收获&#xff1a; 简单总结HTTP请求常用配置&#xff1b;JavaLib中HttpUtils如何使用&#xff1b;如何封装HTTP请求工具类。 第一部分&a…

【Unity入门】3D物体

【Unity入门】3D物体 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;物体移动旋转缩放 &#xff08;1&#xff09;物体移动 在上一篇文章【Unity入门】场景视图操作我们学会了在场景中创建3…

开源供应链管理系统 S2B2B2C系统方案及源码输出

连锁供应链的管理&#xff0c;包括供应链的仓库管理、业务员管理、门店订货管理、门店管理、门店前端拓客管理&#xff0c;相关的功能结构图如下&#xff1a; 整个方案含PC、小程序端&#xff0c;源码&#xff01; 功能列表&#xff1a; 仓库管理&#xff1a;包括仓库布局、库存…

Fabric系列 - TLS身份验证

排序节点&#xff08;Orderer&#xff09;要启用TLS身份验证 对等节点&#xff08;Peer&#xff09;要启用TLS的身份验证 Gossip 消息传递 gossip 层使用 TLS 绑定来验证连接另一端的对等方的身份。 通过 Peer 节点 TLS 层来处理点对点消息的安全性&#xff0c;不需要使用签名…

OpenAI创始人:GPT-4的研究起源和构建心法

OneFlow编译 翻译&#xff5c;杨婷、贾川、徐佳渝 三十年前&#xff0c;互联网&#xff08;Web 1.0&#xff09;时代开启。人们只能在笨重的电脑上用鼠标点击由HTML编写的网页文本&#xff0c;随后开始支持插入图片&#xff0c;可以上传视频&#xff0c;于是有了网络新闻、搜索…

一次小破站JS代码审计出XSS漏洞思路学习

今天看了小破站一个大佬的分析&#xff0c;感觉思路很有意思&#xff0c;感兴趣的xdm可以到大佬视频下提供的链接进行测试&#xff08;传送门&#xff09;这类社交平台的XSS漏洞利用起来其实危害是特别大的&#xff0c;利用XSS能在社交平台上呈现蠕虫式的扩散&#xff0c;大部分…

【人人都能读标准】10. 作用域链与闭包

本文为《人人都能读标准》—— ECMAScript篇的第10篇。我在这个仓库中系统地介绍了标准的阅读规则以及使用方式&#xff0c;并深入剖析了标准对JavaScript核心原理的描述。 在8.执行环境我们说过&#xff0c;由ECMAScript代码创建的执行上下文会有一个词法环境的组件&#xff0…