当前位置: 首页 > news >正文

深度解剖数据在队列的应用

> 作者简介:დ旧言~,目前大一,现在学习Java,c,c++,Python等
> 座右铭:松树千年终是朽,槿花一日自为荣。
> 望小伙伴们点赞👍收藏✨加关注哟💕💕 

 🌟前言       

        前面我们已经学习了顺序表和链表,他们无法控制数据的打印,而队列只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头,今天我们来实现一下--《队列》。

🌙主体

咱们从两个方面实现队列,动态管理,对元素进行操作。

       在程序中为了实现队列,需要创建头文件Queue.h ,创建源文件Queue.c,这里没有主函数了,等到二叉树的时候就会再次运用到队列。

 🌠动态管理

💤初始化动态队列

1.首先我们在Queue.h定义动态的队列,省得我们再调用(队列),这里和链表是一样哒。

//实现队列
typedef struct Queue
{//头QNode* head;//尾QNode* tail;int size;
}Que;

2.对队列进行初始化,没啥好说的。 

//初始化
void QueueInit(Que* pq)
{//断言assert(pq);//初始化pq->head = pq->tail = NULL;pq->size = 0;
}

 💤释放队列内存

这里采用循环的形式来释放内存,都写烂啦。


//销毁
void QueueDestroy(Que* pq)
{//断言assert(pq);//每个节点销毁QNode* cur = pq->head;while (cur){QNode* next = cur->next;//释放内存free(cur);cur = next;}pq->head = pq->tail = NULL;pq->size = 0;
}

  🌠对元素进行操作

 💤添加元素(重点)

这里以单链表的元素进入队列,实现先进先出。

//添加元素
void QueuePush(Que* pq, QDataType x)
{//断言assert(pq);//开辟空间QNode* newnode = (QNode*)malloc(sizeof(QNode));//判断if (newnode == NULL){perror("malloc fail");exit(-1);}newnode->data = x;newnode->next = NULL;//当尾没有元素时 把头当做尾if (pq->tail == NULL){pq->head = pq->tail = newnode;}else{pq->tail->next = newnode;pq->tail = newnode;}pq->size++;
}

 💤释放元素(出队列)(重点)

这里遵循先进先出就行。

void QueuePop(Que* pq)
{//断言 元素不能为0assert(pq);assert(!QueueEmpty(pq));//如果只有一个元素 就头尾一起删if (pq->head->next == NULL){//释放内存free(pq->head);pq->head = pq->tail = NULL;}else{//头删QNode* next = pq->head->next;//释放内存free(pq->head);pq->head = next;}pq->size--;
}

 💤找头

这个函数没啥好说的,直接返回头节点的元素值。

//找尾
QDataType QueueBack(Que* pq)
{//断言assert(pq);assert(!QueueEmpty(pq));//找尾return pq->tail->data;
}

 💤找尾

这个函数没啥好说的,直接返回尾节点的元素值。

//找尾
QDataType QueueBack(Que* pq)
{//断言assert(pq);assert(!QueueEmpty(pq));//找尾return pq->tail->data;
}

 💤计算队列元素个数

这个函数没啥好说的,直接返回pq->size。

//计算队列元素个数
int QueueSize(Que* pq)
{assert(pq);return pq->size;
}

🌙代码总结

🌠Queue.h头文件

//包含头文件
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>//定义元素类型
typedef int QDataType;//定义节点
typedef struct QueueNode
{struct QueueNode* next;QDataType data;
}QNode;//实现队列
typedef struct Queue
{//头QNode* head;//尾QNode* tail;int size;
}Que;//初始化
void QueueInit(Que* pq);
//销毁
void QueueDestroy(Que* pq);//添加元素
void QueuePush(Que* pq, QDataType x);
//删除元素
void QueuePop(Que* pq);//找头
QDataType QueueFront(Que* pq);
//找尾
QDataType QueueBack(Que* pq);//判断
bool QueueEmpty(Que* pq);
//计算队列元素个数
int QueueSize(Que* pq);

🌠Queue.c源文件

//包含头文件
#include"Queue.h"//初始化
void QueueInit(Que* pq)
{//断言assert(pq);//初始化pq->head = pq->tail = NULL;pq->size = 0;
}//销毁
void QueueDestroy(Que* pq)
{//断言assert(pq);//每个节点销毁QNode* cur = pq->head;while (cur){QNode* next = cur->next;//释放内存free(cur);cur = next;}pq->head = pq->tail = NULL;pq->size = 0;
}//添加元素
void QueuePush(Que* pq, QDataType x)
{//断言assert(pq);//开辟空间QNode* newnode = (QNode*)malloc(sizeof(QNode));//判断if (newnode == NULL){perror("malloc fail");exit(-1);}newnode->data = x;newnode->next = NULL;//当尾没有元素时 把头当做尾if (pq->tail == NULL){pq->head = pq->tail = newnode;}else{pq->tail->next = newnode;pq->tail = newnode;}pq->size++;
}//删除元素
void QueuePop(Que* pq)
{//断言 元素不能为0assert(pq);assert(!QueueEmpty(pq));//如果只有一个元素 就头尾一起删if (pq->head->next == NULL){//释放内存free(pq->head);pq->head = pq->tail = NULL;}else{//头删QNode* next = pq->head->next;//释放内存free(pq->head);pq->head = next;}pq->size--;
}//找头
QDataType QueueFront(Que* pq)
{//断言assert(pq);assert(!QueueEmpty(pq));//找头return pq->head->data;
}//找尾
QDataType QueueBack(Que* pq)
{//断言assert(pq);assert(!QueueEmpty(pq));//找尾return pq->tail->data;
}//判断
bool QueueEmpty(Que* pq)
{//断言assert(pq);return pq->head == NULL;
}//计算队列元素个数
int QueueSize(Que* pq)
{assert(pq);return pq->size;
}

🌟结束语

       今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小说手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

相关文章:

深度解剖数据在队列的应用

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大一&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 望小伙伴们点赞&#x1f44d;收藏✨加关注哟&#x1f495;&#x1…...

IMX6ULL移植篇-Linux内核源码目录分析二

一. Linux内核源码目录 本文继续来具体说明 Linux内核源码的一些重要文件含义。 本文续上一篇文章&#xff0c;地址如下&#xff1a; IMX6ULL移植篇-Linux内核源码目录分析一_凌肖战的博客-CSDN博客 二. Linux内核源码目录分析 9. init 目录 此目录存放 Linux 内核启动的…...

汽车行业数据治理方案,助力车企研产供销数据一体化

随着数字技术的不断革新和应用&#xff0c;汽车行业已转向大数据、新技术寻求生产力突破&#xff0c;以电动化、网联化、智能化、共享化为标志的“汽车新四化”&#xff0c;为汽车行业带来了翻天覆地的变化。如何抓住“新四化”的机会&#xff0c;在汽车产业变革中赢得先机&…...

canvas-绘图库fabric.js简介

一般情况下简单的绘制&#xff0c;其实canvas原生方法也可以满足&#xff0c;比如画个线&#xff0c;绘制个圆形、正方形、加个文案。 let canvas document.getElementById(canvas);canvas.width 1200;canvas.height 600;canvas.style.width 1200px;canvas.style.height 6…...

代码审计——任意文件下载详解(二)

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 网站可能提供文件查看或下载的功能&#xff0c;如果对用户查看或下载的文件不做限制&#xff0c;就能够查看或下载任意的文件&…...

19异常的学习笔记

异常 很重要&#xff0c;有利于我们平时处理问题 异常就是代表程序出现了问题 常见的异常比如说 数组越界除法除0 异常的体系是什么 java.lang.Throwable Error Exception RuntimeException 其他异常 Error 代表的是系统级别的错误&#xff0c;也就是一旦系统出现问题&…...

Jenkins学习笔记4

配置构建流程&#xff1a; Jenkins任务创建&#xff1a; 1&#xff09;创建新任务&#xff1a; 把这个Accept first connection改成 No Validation。问题得到解决。 构建触发器这块暂时没有需要配置的。 传输文件到nginx-server这个web服务器中。 将文件上传到/usr/share/n…...

自学 Java 需要具备哪些基本条件或技能?

新手初学者在自己学习Java时&#xff0c;需要注意两个方面&#xff0c;一个是学习方面&#xff0c;一个是知识点方面&#xff01; 学习方面&#xff1a; 1、做学习计划并保持自律 在我们学习Java的过程中&#xff0c;尽量减少干扰&#xff0c;把自己的全部注意力集中在Java上…...

[激光原理与应用-68]:如何消除50Hz工频干扰和差分信号应对工频干扰

目录 一、什么工频干扰 1.1 什么工频干扰 1.2 工频干扰的幅度 1.3 工频干扰如何进入设备 1.4 工频干扰的负面影响 二、如何消除工频干扰 2.1 要消除工频干扰&#xff0c;可以考虑以下方法&#xff1a; 2.2 要具体消除工频干扰&#xff0c;可以采取以下措施 2.3 使用差…...

【力扣-每日一题】LCP 06. 拿硬币

class Solution { public:int minCount(vector<int>& coins) {int res0;for(auto i:coins){resi/2;res(i%2)?1:0;}return res;} };...

【JAVA-Day32】精通Java函数:定义、调用和主函数的完整指南

精通Java函数&#xff1a;定义、调用和主函数的完整指南 精通Java函数&#xff1a;定义、调用和主函数的完整指南摘要引言1. Java函数基础什么是Java函数&#xff1f;函数的定义和命名规则参数和返回值的概念 2. 函数的定义与语法如何声明和定义函数&#xff1f;函数的参数和参…...

springboot相关操作学习汇总

IDEAMAVEN apache maven 3.6.3 的安装及配置IntelliJ IDEA 安装及配置详细教程Maven下载安装及IDEA配置Maven的超详细教程 GIT 版本控制工具 - git的安装与使用gitlab上传新项目全过程 SPRINGBOOT IDEAmavenSpringboot工程创建超详细过程示例SpingBoot&#xff1a;整合Myb…...

如何在微信上制作自己的小程序卖东西

在当今的数字化时代&#xff0c;微信小程序已成为电商行业的重要平台。本文将详细解析电商微信小程序的制作流程&#xff0c;帮助你了解从零到上线的过程。 一、前期准备 1. 确定商城定位和目标群体&#xff1a;在制作电商微信小程序前&#xff0c;你需要明确商城的定位&#x…...

24.Xaml ListView控件-----显示数据

1.运行效果 2.运行源码 a.Xaml源码 <Window x:Class="testView.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic…...

YoloV5改进实战:使用MPDIoU改进YoloV5

文章目录 摘要论文:揭秘精准高效的MPDIoU损失函数摘要1、简介2、相关工作2.1、目标检测和实例分割2.2. 场景文本识别2.3、边界框回归的损失函数3、点距最小的并集交点4、实验结果4.1、 实验设置4.2、数据集4.3、 评估协议4.4、 目标检测的实验结果4.5、 字符级场景文本识别的实…...

从电大搜题到上海开放大学,广播电视大学引领学习新风尚

近年来&#xff0c;随着信息技术的飞速发展&#xff0c;互联网的普及和应用成为了我们生活中不可或缺的一部分。而在大学学习领域&#xff0c;电大搜题微信公众号应运而生&#xff0c;为广大学子提供了便捷的学习资源和交流平台。在这个信息高速发展的时代&#xff0c;上海开放…...

DC/DC开关电源学习笔记(九)Buck降压拓扑原理

(九)Buck降压拓扑原理 1.概述2. Buck降压原理3. Buck电路的三种工作模式3.1 CCM:3.2 BCM3.3 DCM4. 伏秒法则1.概述 Buck电路属于非隔离的直流变换器,在开关电源中广泛应用,BUCK电路是一种基于电感储能原理的DC-DC变换器,其涉及到物理中的电磁感应和电能转换的基本原理。…...

【浏览器】主流浏览器伪元素一览

不同浏览器对于伪元素的支持程度可能会有所差异。以下是各主流浏览器对一些常见伪元素的支持情况&#xff1a; WebKit&#xff08;Chrome、Safari、新版Edge&#xff09;&#xff1a; ::-webkit-scrollbar&#xff1a;用于自定义滚动条样式的伪元素。::-webkit-outer-spin-butt…...

国内首个潮玩行业沉浸式IP主题乐园,泡泡玛特城市乐园即将开园

近年来&#xff0c;泡泡玛特以潮玩IP为核心&#xff0c;不断拓展业务版图&#xff0c;推进国际化布局同时实现集团化运营&#xff0c;而泡泡玛特首个城市乐园将于9月下旬开业。据了解&#xff0c;泡泡玛特城市乐园是由泡泡玛特精心打造的沉浸式IP主题乐园&#xff0c;占地约4万…...

编译工具:CMake(八) | cmake 常用指令

编译工具&#xff1a;CMake&#xff08;八&#xff09; | cmake 常用指令 基本指令 基本指令 ADD_DEFINITIONS向 C/C编译器添加-D 定义&#xff0c;比如:ADD_DEFINITIONS(-DENABLE_DEBUG-DABC)&#xff0c;参数之间用空格分割。 如果你的代码中定义了#ifdef ENABLE_DEBUG #end…...

什么是GPT磁盘?介绍GPT(GUID 分区表)磁盘及其优势!

GPT概述 GPT磁盘是什么意思&#xff1f;GPT是全局唯一标识符分区表&#xff08;GUID Partition Table&#xff09;的简称&#xff0c;它是硬盘分区表结构的一个标准模式。在我们深入了解GPT磁盘的特性之前须知&#xff0c;MBR磁盘的分区信息直接保存在主引导记录&#xff0…...

直播视频处理过程

视频其实就是快速播放一连串连续的图片。 每一张图片&#xff0c;我们称为一帧。只要每秒钟帧的数据足够多&#xff0c;也即播放得足够快。比如每秒 30 帧&#xff0c;以人的眼睛的敏感程度&#xff0c;是看不出这是一张张独立的图片的&#xff0c;这就是我们常说的帧率&#…...

CGI与FastCGI的区别在哪里,FastCGI的应用场景讲解

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…...

记录selenium和chrome使用socks代理打开网页以及查看selenium的版本

使用前&#xff0c;首先打开socks5全局代理。 之前我还写过一篇关于编程中使用到代理的情况&#xff1a; 记录一下python编程中需要使用代理的解决方法_python 使用全局代理_小小爬虾的博客-CSDN博客 在本文中&#xff0c;首先安装selenium和安装chrome浏览器。 参考我的文章…...

2023 年最新 Docker 容器技术基础详细教程(更新中)

Docker 基本概述 Docker 是一个开源的应用容器引擎&#xff0c;它让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux 或 Windows 操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间…...

初学phar反序列化

以下内容参考大佬博客&#xff1a;PHP Phar反序列化浅学习 - 跳跳糖 首先了解phar是什么东东 Phar是PHP的压缩文档&#xff0c;是PHP中类似于JAR的一种打包文件。它可以把多个文件存放至同一个文件中&#xff0c;无需解压&#xff0c;PHP就可以进行访问并执行内部语句。 默认开…...

嵌入式web项目框架解读

文章目录 前言一、阅读Makefile可以迅速了解整个项目框架二、项目框架中的服务器&#xff1a;boa三、接口&#xff1a;cgi四、项目文件总结 前言 项目框架敬上&#xff01;&#xff01;&#xff01; 一、阅读Makefile可以迅速了解整个项目框架 项目中的Makefile主要分为三个部…...

MySQL什么情况下会死锁,发生了死锁怎么处理呢?

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…...

数字孪生行业相关政策梳理--智慧水利领域相关政策(可下载)

自2021年国家“十四五”规划纲要提出“探索建设数字孪生城市”以来&#xff0c;国家发展和改革委员会、工业和信息化部、住房和城乡建设部、水利部、农业农村部等部门纷纷出台政策&#xff0c;大力推动数字孪生在千行百业的落地发展。这些政策不仅为数字孪生的应用提供了广阔的…...

SQL plus简单使用

查看Oracle数据库全部数据库 数据库名称 SELECT name FROM v$database;这将返回所有数据库的名称。 视图 通过SQL查询dba_registry视图&#xff1a; 另一个查看数据库的方法是查询dba_registry视图&#xff0c;该视图包含了数据库中安装的所有组件的信息。以下是示例SQL查询…...

网页制作教程菜鸟/百度seo整站优化

一、namenode存储元数据的有三部分&#xff1a; 1、内存中&#xff0c;会存储所有元数据&#xff0c;但断电会丢失&#xff1b; 2、硬盘中,也会存储所有元数据&#xff0c;但由edits logfsimage才是所有元数据&#xff1b; (1) edits log日志文件中&#xff0c;存最新储增删…...

WordPress网站关闭插件/5118网站如何使用免费版

昨天面试上来就是一个算法&#xff0c;平时基本的算法还行&#xff0c;结果变个法就不会了。。。感觉应该刷一波Leecode冷静下。。。今天抽空看下。题目就是要求O(n)复杂度求无序列表中第K的大元素如果没有复杂度的限制很简单。。。加了O(n)复杂度确实有点蒙虽然当时面试官说思…...

建设工程施工安全网站/高端网站建设定制

神码ai人工智能写作机器人以下是摘自Earle Castledine撰写的新书HTML5 Games&#xff1a;Ninja的新手 。 这本书的访问权限包含在SitePoint Premium会员资格中&#xff0c;或者您可以在世界各地的商店中索取副本。 您可以在此处查看第一章的免费样本 。 现在&#xff0c;我们拥…...

承德网站建设规划/请你设计一个网络营销方案

文章目录前言一、用途1.捕获页面错误2.调试测试用例3.展示测试结果4.记录页面状态二、方法1. save_screenshot2. get_screenshot_as_file3. get_screenshot_as_png4. get_screenshot_as_base64总结前言 大家好&#xff0c;我是空空star&#xff0c;本篇给大家分享一下Selenium基…...

凤岗本地网站/上海最新新闻

一、jenkins 介绍 Jenkins是一个开源的、可扩展的持续集成、交付、部署&#xff08;软件/代码> 的编译、打包、部署&#xff09;基于web界面的平台。 简单说&#xff0c;就是各种项目的"自动化"编译、打包、分发部署。jenkins可以很好的支持各种语言&#xff08;比…...

四川省住房和城乡建设厅官方网站/杭州新站整站seo

H - 扑克牌 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 128000/64000 KB (Java/Others)Submit StatusProblem Description 一副不含王的扑克牌由52张牌组成&#xff0c;由红桃、黑桃、梅花、方块4组牌组成&#xff0c;每组13张不同的面值。现在给定52张牌中的…...