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

队列的定义及基本操作实现(链式)

个人主页:【😊个人主页】
系列专栏:【❤️数据结构与算法】
学习名言:天子重英豪,文章教儿曹。万般皆下品,惟有读书高

系列文章目录

第一章 ❤️ 学前知识
第二章 ❤️ 单向链表
第三章 ❤️ 递归


文章目录

  • 系列文章目录
  • 前言
  • 一.队列是什么?🧐🧐🧐
  • 二、队列与线性表的关系🆚🆚🆚
  • 三、队列的基本操作🔬🔬🔬
    • 1.队列的储存结构结构💻
    • 2.队列的初始化✨
    • 3. 入队🚗
    • 4.出队🚅
    • 5.清空与销毁🆘
  • 总结🎆🎆🎆


前言

在这里插入图片描述


一.队列是什么?🧐🧐🧐

和栈相反,队列( queue)是一种先进先出( First In First Out, FIFO) 的线性表。它只允许在表的一端进行插人,而在另一端删除元素。这和日常生活中的排队是一致的, 最早进入队列的元素最早离开。在队列中,允许插入的一端称为队尾( rear),允许删除的一端则称为队 头( front) 。假设队列为q=(a1,a2, .,an),那么,a就是队头元素, a,则是队尾元素。队列中的元素是按照a, a, … a,的顺序进人的,退出队列也只能按照这个次序依次退出,也就是说,只有在a,a., an,都离开队列之后,a,才能退出队列。

请添加图片描述

二、队列与线性表的关系🆚🆚🆚

与栈一样队列也是一种重要的线性结构。从数据结构角度看,队列也是线性表,其特殊性在于队列的基本操作是线性表操作的子集,它们是操作受限的线性表,因此,可称为具有限定性的数据结构。但从数据类型角度看,它是和线性表不相同的两类重要的抽象数据类型。


三、队列的基本操作🔬🔬🔬

1.队列的储存结构结构💻

typedef struct Qnode
{Elemtype data;struct Qnode* next;
}QNode, * QueuePrt;//建立链表
typedef struct
{QueuePrt front;QueuePrt rear;//指向头和尾的两个指针}LinkQueue;//建立队列

2.队列的初始化✨

InitQueue(LinkQueue* q)
{q->front = q->rear = (QueuePrt)malloc(sizeof(QNode));//创建头结点if (!q->front)exit(0);q->front->next = NULL;
}//初始队列

其实就是链表中的创建头结点


3. 入队🚗

InsertQueue(LinkQueue *q, Elemtype e)
{QueuePrt p;p = (QueuePrt)malloc(sizeof(QNode));//创建结点if (p == NULL)exit(0);p->data = e;//赋值p->next = NULL;//q->rear->next = p;//头指针指向下一个结点q->rear = p;
}

在这里插入图片描述


4.出队🚅

DeletQueue(LinkQueue* q, Elemtype* e)
{QueuePrt p;if (q->front == q->rear)return 0;*e = p->data;q->front->next = p->next;if (q->rear == p)q->rear = q->front;free(p);
}

5.清空与销毁🆘

DesteoyQueue(LinkQueue* q)
{while (q->rear = q->front->next){free(q->front);q->front = q->rear;}
}

总结🎆🎆🎆

队列是一种先进先出的线性表。它只允许在表的一端进行插人, 而在另一端进行删除。队列也有两种存储表示,顺序表示(循环队列)和链式表示( 链队)。队列的主要操作是进队和出队,对于顺序表示的循环队列的进队和出队操作要注意判断队满或队空。凡是涉及队头或队尾指针的修改都要将其对MAXQSIZE求模。

#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;//定义类型
typedef struct Qnode
{Elemtype data;struct Qnode* next;
}QNode, * QueuePrt;//建立链表
typedef struct
{QueuePrt front;QueuePrt rear;//指向头和尾的两个指针}LinkQueue;//建立队列
InitQueue(LinkQueue* q)
{q->front = q->rear = (QueuePrt)malloc(sizeof(QNode));//创建头结点if (!q->front)exit(0);q->front->next = NULL;
}//初始队列
InsertQueue(LinkQueue *q, Elemtype e)
{QueuePrt p;p = (QueuePrt)malloc(sizeof(QNode));//创建结点if (p == NULL)exit(0);p->data = e;//赋值p->next = NULL;//q->rear->next = p;//头指针指向下一个结点q->rear = p;
}
DeletQueue(LinkQueue* q, Elemtype* e)
{QueuePrt p;if (q->front == q->rear)return 0;*e = p->data;q->front->next = p->next;if (q->rear == p)q->rear = q->front;free(p);
}
DesteoyQueue(LinkQueue* q)
{while (q->rear = q->front->next){free(q->front);q->front = q->rear;}
}

(文章中图片与部分内容来源与网络,如有侵权请联系删除)
在这里插入图片描述

相关文章:

队列的定义及基本操作实现(链式)

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️数据结构与算法】 学习名言&#xff1a;天子重英豪&#xff0c;文章教儿曹。万般皆下品&#xff0c;惟有读书高 系列文章目录 第一章 ❤️ 学前知识 第二章 ❤️ 单向链表 第三章 ❤️ 递归 文章目录…...

集成方法!

目录 关注降低variance,选择bias较小的基学习器 Bagging Stacking Random Forest 关注降低bias,选择variance较小的基学习器 Adaboost Boosting 关注降低variance,选择bias较小的基学习器 Bagging 给定m个样本的数据集&#xff0c;利用有放回的随机采样法&#xff0c;得…...

20年程序员生涯,读了200多本技术书,挑了几本精华好书分享给大家

不知不觉已经又走过了20个年头了&#xff0c;今年已经44了&#xff0c;虽然我已经退休在家&#xff0c;但一直都保持着读书的习惯&#xff0c;我每年平均要读10本技术书籍&#xff0c;保持不让自己的技术落伍。 这些年读的技术书不下200本&#xff0c;很多好书我都会保存在家&a…...

C++ 手写一个WebServer

文章目录 前言一、WebServer的原理刨析二、HTTP协议基础三、C++代码实战四、运行测试前言 本文由:我不会画饼呀 提供建议 大家如果有什么想看的文章(想了解的知识点),都可以在本专栏文章底部评论,或者私信我,在有能力的前提下,我都会尽量给大家写出来,供大家学习参考 …...

Elasticsearch 简介与安装

简介 Elasticsearch 是一个开源的搜索引擎&#xff0c;建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—​无论是开源还是私有。 但是 Lucene 仅仅只是一个库。为了充分发挥其功能&#xff0c;你需要使用 Java…...

Qt5.12实战之QByteArray与字符指针及字符串转换

示例源码:#include <QCoreApplication> #include <QDebug> #include <QTextStream> static QTextStream cout (stdout,QIODevice::WriteOnly); #include <iostream> #include <QtGlobal> #include <QByteArray>void test() {qDebug() <…...

二、ElasticSearch基础语法

目录一、简单了解ik分词器(分词效果)1.standard(单字分词器&#xff0c;es默认分词器)2.ik_smart分词(粗粒度的拆分)3.ik_max_word分词器&#xff08;最细粒度拆分&#xff09;二、指定默认分词器1.为索引指定默认分词器三、ES操作数据1.概述2.创建索引3.查询索引4.删除索引5.添…...

Yolov8详解与实战

文章目录摘要模型详解C2F模块Losshead部分模型实战训练COCO数据集下载数据集COCO转yolo格式数据集&#xff08;适用V4&#xff0c;V5&#xff0c;V6&#xff0c;V7&#xff0c;V8&#xff09;配置yolov8环境训练测试训练自定义数据集Labelme数据集摘要 YOLOv8 是 ultralytics …...

多线程案例——阻塞队列

目录 一、阻塞队列 1. 生产者消费者模型 &#xff08;1&#xff09;解耦合 &#xff08;2&#xff09;“削峰填谷” 2. 标准库中的阻塞队列 3. 自己实现一个阻塞队列&#xff08;代码&#xff09; 4. 自己实现生产者消费者模型&#xff08;代码&#xff09; 一、阻塞队列…...

学习优秀博文(【国产MCU移植】手把手教你使用RT-Thread制作GD32系列BSP)有感 | 文末赠书5本

学习优秀博文&#xff08;【guo产MCU移植】手把手教你使用RT-Thread制作GD32系列BSP&#xff09;有感 一篇优秀的博文是什么样的&#xff1f;它有什么规律可循吗&#xff1f;优秀的guo产32位单片机处理器是否真的能成功替换掉stm32的垄断地位&#xff1f; 本文博主以亲身经历聊…...

写用例写的焦头烂额?看看摸鱼5年的老点工是怎么写的...

给你个需求&#xff0c;你要怎么转变成最终的用例&#xff1f; 直接把需求文档翻译一下就完事了。 老点工拿到需求后的标准操作&#xff1a; 第一步&#xff1a;解析需求 先解析需求-找出所有需求中的动词&#xff0c;再列出所有测试点。测试点过程不断发散&#xff0c;对于…...

基于深度学习的鸟类检测识别系统(含UI界面,Python代码)

摘要&#xff1a;鸟类识别是深度学习和机器视觉领域的一个热门应用&#xff0c;本文详细介绍基于YOLOv5的鸟类检测识别系统&#xff0c;在介绍算法原理的同时&#xff0c;给出Python的实现代码以及PyQt的UI界面。在界面中可以选择各种鸟类图片、视频以及开启摄像头进行检测识别…...

零基础搭建Tomcat集群(超详细)

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…...

机器学习自学笔记——聚类

聚类的基本概念 聚类&#xff0c;顾名思义&#xff0c;就是将一个数据集中各个样本点聚集成不同的“类”。每个类中的样本点都有某些相似的特征。比如图书馆中&#xff0c;会把成百上千的书分成不同的类别&#xff1a;科普书、漫画书、科幻书等等&#xff0c;方便人们查找。每…...

注意下C语言整形提升

C语言整形提升 C语言整形提升是指在表达式中使用多种类型的数据时&#xff0c;编译器会自动将较小的类型转换为较大的类型&#xff0c;以便进行运算。在C语言中&#xff0c;整型提升规则如下&#xff1a; 如果表达式中存在short类型&#xff0c;则将其自动转换为int类型。 如…...

Go panic的学习

一、前言 我们的应用程序常常会出现异常&#xff0c;包括由运行时检测到的异常或者应用开发者自己抛出的异常。 异常在一些其他语言中&#xff0c;如c、java&#xff0c;被叫做Exception&#xff0c;主要由抛出异常和捕获异常两部分组成。异常在go语言中&#xff0c;叫做pani…...

讲解Linux中samba理论讲解及Linux共享访问

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放&#xff0…...

【C++笔试强训】第三十二天

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f4a6;&a…...

OpenAI GPT-4震撼发布:多模态大模型

OpenAI GPT-4震撼发布&#xff1a;多模态大模型发布要点GPT4的新功能GPT-4:我能玩梗图GPT4:理解图片GPT4:识别与解析图片内容怎样面对GPT4申请 GPT-4 API前言&#xff1a; &#x1f3e0;个人主页&#xff1a;以山河作礼。 &#x1f4dd;​&#x1f4dd;:本文章是帮助大家更加了…...

手把手教你 在linux上安装kafka

目录 1. 准备服务器 2. 选一台服务器配置kafka安装包 2.1 下载安装包 2.2 解压安装包 2.3 修改配置文件 3. 分发安装包到其他机器 4. 修改每台机器的broker.id 5. 配置环境变量 6. 启停kafka服务 6.1 启动kafak服务 6.2 停止kafka服务 1. 准备服务器 1.买几台云服务…...

EagleEye部署避坑指南:DAMO-YOLO TinyNAS环境搭建一步到位

EagleEye部署避坑指南&#xff1a;DAMO-YOLO TinyNAS环境搭建一步到位 1. 为什么选择DAMO-YOLO TinyNAS&#xff1f; 在目标检测领域&#xff0c;我们常常面临一个两难选择&#xff1a;要么使用高精度但速度慢的大型模型&#xff0c;要么选择快速但精度不足的轻量模型。DAMO-…...

网络安全人才平均年薪 24.09 万,跳槽周期 31 个月,安全工程师现状大曝光!

网络安全作为近两年兴起的热门行业&#xff0c;成了很多就业无门但是想转行的人心中比较向往但是又心存疑惑的行业&#xff0c;毕竟网络安全的发展史比较短&#xff0c;而国内目前网安的环境和市场情况还不算为大众所知晓&#xff0c;所以到底零基础转行入门网络安全之后&#…...

Davinci大数据可视化平台:企业级React TypeScript架构实战指南

Davinci大数据可视化平台&#xff1a;企业级React TypeScript架构实战指南 【免费下载链接】davinci edp963/davinci: DaVinci 是一个开源的大数据可视化平台&#xff0c;它可以处理大规模数据集并生成丰富的可视化报告&#xff0c;帮助企业或个人更好地理解和分析数据。 项目…...

基于天棚控制原理的半主动悬架模型探索

基于天棚控制原理的半主动悬架模型 详细介绍&#xff1a;采用天棚阻尼控制的1/4主动悬架模型&#xff0c;以车身垂向加速度为控制目标&#xff0c;输入为B级随机路面&#xff0c;输出为车身垂向加速度、轮胎动载荷、悬架动挠度等平顺性评价指标&#xff0c;并计算了各个参数的均…...

IEEE论文必备:LaTeX伪代码排版全攻略(附algorithmic与algorithm2e对比)

IEEE论文伪代码排版实战指南&#xff1a;从algorithmic到algorithm2e的深度解析 第一次在IEEE论文里插入伪代码时&#xff0c;我盯着编译报错发了半小时呆——明明本地预览完美无缺&#xff0c;上传到Overleaf却显示"undefined control sequence"。后来才发现是忘了在…...

如何用可视化工具突破AI绘画模型训练瓶颈?

如何用可视化工具突破AI绘画模型训练瓶颈&#xff1f; 【免费下载链接】kohya_ss 项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss 在AI绘画快速发展的今天&#xff0c;模型训练一直是技术爱好者和创作者面临的主要挑战。传统的命令行训练方式不仅门槛高&a…...

AI热潮重塑中国云市场定价策略

又有两家中国云巨头宣布其服务价格上调&#xff0c;这再次归因于人工智能对其供应链的影响。 某中心云率先行动&#xff0c;昨日宣布将产品价格上调5%至34%&#xff0c;并表示“全球AI需求激增和供应链成本上升”使得涨价不可避免。 某机构云紧随其后&#xff0c;宣布“为确保平…...

1Drake:面向机器人开发的模型设计与验证框架

1Drake&#xff1a;面向机器人开发的模型设计与验证框架 【免费下载链接】drake Model-based design and verification for robotics. 项目地址: https://gitcode.com/gh_mirrors/dr/drake 核心价值解析 理解Drake的核心定位 Drake是一个开源的机器人仿真与控制框架&a…...

Fish Speech 1.5实操手册:解决语音不自然、克隆失真等高频问题

Fish Speech 1.5实操手册&#xff1a;解决语音不自然、克隆失真等高频问题 1. 快速上手&#xff1a;5分钟搞定语音合成 你是不是遇到过语音合成工具生成的语音听起来很机械、不自然&#xff1f;或者声音克隆出来的效果完全不像本人&#xff1f;Fish Speech 1.5就是为了解决这些…...

神经网络计算量那些事:FLOPs/MACs/MACCs到底怎么算?从公式到代码的完整对照

神经网络计算量全解析&#xff1a;从FLOPs到MACs的实战指南 在深度学习模型优化过程中&#xff0c;计算量评估是每个开发者必须掌握的核心技能。面对FLOPs、MACs、MACCs这些专业术语&#xff0c;新手往往一头雾水——它们究竟代表什么&#xff1f;如何准确计算&#xff1f;更重…...