网站制作内容文案/企业网站的作用和意义
目录
一、什么是队列?
二、创建一个我们自己的队列
1.前置准备
1.1需要的三个文件
1.2结构体的创建和头文件的引用
2.接口的实现
2.1初始化队列
2.2入队
2.3队列元素个数和判空
2.4取队头元素和队尾元素
2.5出队
2.6摧毁队列
2.7测试接口
三、所有代码
1.接口实现
2.队列的头文件
3.测试代码
一、什么是队列?
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。可以形象地将队列想象成生活中的挤地铁,在挤地铁的时候我们只能够从后面进入队伍,出也只能够从队头出到地铁。总结:队列是只支持尾插头删的线性表。
二、创建一个我们自己的队列
1.前置准备
1.1需要的三个文件
在开始之前,我们最好创建三个文件,一个放栈函数的实现,一个用来测试栈函数,最后一个放栈函数的引用和头文件的引用,这样到时侯想要使用栈函数直接包这一个头文件即可。创建完之后,呈现出来的效果与下图差不多即可。
1.2结构体的创建和头文件的引用
由于队列需要头删,使用数组实现的话最终呈现出来的效率十分低下,我们这里使用链表的方式实现,使用链表来实现线性表,头和尾是经常要用到的,同样队列的长度也很重要。因此我们创建两个结构体变量,一个结构体变量为链表的节点,一个结构体变量存放链表的头和尾以及队列的长度。
最终呈现出来的结果是这样的
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int QueDateType;
//到时修改类型时只用改这里的一个就可以,不需要一个个修改
//同样,这也是为了和单一的int作区分
typedef struct QueueListNode
{struct QueueListnode* next;//存放下一个节点QueDateType data;//存放当前节点的数据
}Quenode;
typedef struct QueueInformation
{Quenode* head;//存放头节点Quenode* tail;//存放尾节点int sz;//存放个数
}Que;
2.接口的实现
2.1初始化队列
没什么好说的,将队列的两个指针变为空,存放个数的变量变为0即可
void init_queue(Que* q1)
{assert(q1);//q1存放的是结构体的指针,不应为空,为空操作不了q1->head = NULL;q1->tail = NULL;q1->sz = 0;
}
2.2入队
void push_queue(Que* q1, QueDateType x)
{assert(q1);//创建一个新节点,并初始化Quenode* newnode = (Quenode*)malloc(sizeof(Quenode)); if (newnode == NULL){perror("push_queue");exit(-1);}newnode->next = NULL;newnode->data = x;if (q1->head == NULL)//如果头为空,意味着还没有节点,单独处理{q1->head = q1->tail = newnode;}else{q1->tail->next = newnode;//原来的尾链接上新的尾q1->tail = newnode;//将尾更新}q1->sz++;
}
2.3队列元素个数和判空
可能有小伙伴不明白为什么又要设计这两个接口,因为这两个信息都可以直接通过队列的结构体获得,好像没什么作用啊。设计这两个接口并使用它们而不是直接通过结构体的内容来判断是因为,当我们的需求发生改变了,所创建的结构体可能也会跟着修改,可能提取的方式会发生一些改变 如果我们在使用队列的时候已经直接通过结构体的内容进行了多次的判断,那么我们要修改起来,要修改多次,很不方便,这样做的好处就是只用修改一次即可
队列元素个数
int size_queue(Que* q1)
{assert(q1);return q1->sz;
}
判空
int empty_queue(Que* q1)
{assert(q1);return q1->sz == 0;//相等即为空,返回1(真)//不相等即为非空,返回0(假)
}
2.4取队头元素和队尾元素
这两个操作很相似,唯一要注意的就是,为空的时候不能取
取队头元素
QueDateType queue_front(Que* q1)
{assert(q1);assert(!empty_queue(q1));//队列不能是空return q1->head->data;
}
取队尾元素
QueDateType queue_back(Que* q1)
{assert(q1);assert(!empty_queue(q1));//队列不能是空return q1->tail->data;
}
2.5出队
需要注意的是,不能够删除空队列,其次我们删除到最后一个节点时要单独处理
void pop_queue(Que* q1)
{assert(q1);assert(!empty_queue(q1));if (q1->head->next == NULL)//最后一个节点单独处理//避免尾指针变野指针{free(q1->head);q1->head = NULL;q1->tail = NULL;}else{Quenode* next = q1->head->next;free(q1->head);q1->head = next;}q1->sz--;
}
2.6摧毁队列
void destroy_queue(Que* q1)
{assert(q1);Quenode* cur = q1->head;while (cur){Quenode* next = cur->next;free(cur);cur = next;}
}
2.7测试接口
测试代码:
#include"queue.h"
void test1()
{Que q1;init_queue(&q1);push_queue(&q1, 1);push_queue(&q1, 2);push_queue(&q1, 3);push_queue(&q1, 4);push_queue(&q1, 5);printf("%d\n", queue_back(&q1));while (!empty_queue(&q1)){printf("%d ", queue_front(&q1));pop_queue(&q1);}destroy_queue(&q1);
}
int main()
{test1();
}
测试结果:
三、所有代码
1.接口实现
#include"queue.h"
void init_queue(Que* q1)
{assert(q1);//q1存放的是结构体的指针,不应为空,为空操作不了q1->head = NULL;q1->tail = NULL;q1->sz = 0;
}
void push_queue(Que* q1, QueDateType x)
{assert(q1);//创建一个新节点,并初始化Quenode* newnode = (Quenode*)malloc(sizeof(Quenode)); if (newnode == NULL){perror("push_queue");exit(-1);}newnode->next = NULL;newnode->data = x;if (q1->head == NULL)//如果头为空,意味着还没有节点,单独处理{q1->head = q1->tail = newnode;}else{q1->tail->next = newnode;//原来的尾链接上新的尾q1->tail = newnode;//将尾更新}q1->sz++;
}
int size_queue(Que* q1)
{assert(q1);return q1->sz;
}
int empty_queue(Que* q1)
{assert(q1);return q1->sz == 0;//相等即为空,返回1(真)//不相等即为非空,返回0(假)
}
QueDateType queue_front(Que* q1)
{assert(q1);assert(!empty_queue(q1));//队列不能是空return q1->head->data;
}
QueDateType queue_back(Que* q1)
{assert(q1);assert(!empty_queue(q1));//队列不能是空return q1->tail->data;
}
void pop_queue(Que* q1)
{assert(q1);assert(!empty_queue(q1));if (q1->head->next == NULL)//最后一个节点单独处理//避免尾指针变野指针{free(q1->head);q1->head = NULL;q1->tail = NULL;}else{Quenode* next = q1->head->next;free(q1->head);q1->head = next;}q1->sz--;
}
void destroy_queue(Que* q1)
{assert(q1);Quenode* cur = q1->head;while (cur){Quenode* next = cur->next;free(cur);cur = next;}
}
2.队列的头文件
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int QueDateType;
//到时修改类型时只用改这里的一个就可以,不需要一个个修改
//同样,这也是为了和单一的int作区分
typedef struct QueueListNode
{struct QueueListnode* next;//存放下一个节点QueDateType data;//存放当前节点的数据
}Quenode;
typedef struct QueueInformation
{Quenode* head;//存放头节点Quenode* tail;//存放尾节点int sz;//存放个数
}Que;
void init_queue(Que* q1);
void push_queue(Que* q1, QueDateType x);
void pop_queue(Que* q1);
int size_queue(Que* q1);
int empty_queue(Que* q1);
QueDateType queue_front(Que* q1);
QueDateType queue_back(Que* q1);
void destroy_queue(Que* q1);
3.测试代码
#include"queue.h"
void test1()
{Que q1;init_queue(&q1);push_queue(&q1, 1);push_queue(&q1, 2);push_queue(&q1, 3);push_queue(&q1, 4);push_queue(&q1, 5);printf("%d\n", queue_back(&q1));while (!empty_queue(&q1)){printf("%d ", queue_front(&q1));pop_queue(&q1);}destroy_queue(&q1);
}
int main()
{test1();
}
好了,今天的分享到这里就结束了感谢各位友友的来访,祝各位友友前程似锦O(∩_∩)O
相关文章:

栈和队列详解(2)
目录 一、什么是队列? 二、创建一个我们自己的队列 1.前置准备 1.1需要的三个文件 1.2结构体的创建和头文件的引用 2.接口的实现 2.1初始化队列 2.2入队 2.3队列元素个数和判空 2.4取队头元素和队尾元素 2.5出队 2.6摧毁队列 2.7测试接口 三、所有代码 1.…...

EMC传导干扰滤波电路设计
1.EMC概念 2.EMC 传导干扰详解 EMC传导滤波电路的设计--传导干扰详解 3.EMC 传导干扰的测量方法 4.EMC 滤波电路设计 5.浪涌抑制电路设计 6.开关电源的安全要求 7.当前开关电源灯的应用...

【win10专业版远程控制】 自带远程桌面公司内网电脑
使用win10专业版自带远程桌面公司内网电脑 文章目录 使用win10专业版自带远程桌面公司内网电脑 在现代社会中,各类电子硬件已经遍布我们身边,除了应用在个人娱乐场景的消费类电子产品外,各项工作也离不开电脑的帮助,特别是涉及到数…...

Ubuntu 20.04 中安装docker一键安装脚本
直接上脚本,依次执行如下命令即可 wget http://apollo-pkg-beta.bj.bcebos.com/docker_install.sh bash docker_install.shdocker install docker operation system Ubuntu 18.04 直接上脚本,依次执行如下命令即可 ways1 : wget https://github.com…...

Mysql之安装-字符集设置-用户及权限操作-sqlmode设置
1、概述 MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。使用标准的SQL数据语言形式。 2、Linux的mysql安装 (1)检查是否已安装:rpm -qa…...

腾讯云香港服务器租用价格_CN2线路延迟速度测试
腾讯云香港服务器,目前中国香港地域轻量应用服务器可选配置2核2G20M、2核2G30M、2核4G30M,操作系统可选Windows和Linux,不只是香港云服务器,新加坡、硅谷、法兰克福和东京服务器均有活动,腾讯云服务器网分享腾讯云境外…...

机器人静力学与刚度模型学习笔记
总算进行到刚度模型了。。。 ❤ 2023.8.6 ❤ 机器人静力学 学习资料 →→→【4-10机器人的静力分析】 机器人末端广义力 F [ f m ] [ f x f y f z m x m y m z ] F\left[\begin{matrix}f\\m\\\end{matrix}\right]\left[\begin{matrix}f_x\\f_y\\f_z\\m_x\\m_y\\m_z\\\end{…...

geeemap学习总结(1)——Anaconda-VSCode-geemap环境安装与配置
配置conda geemap 环境 通过Anaconda配置geemap环境较为方便,首先需在系统中完成 Anaconda安装。创建名为geemap的环境conda create -n geemap切换到新建的环境conda activate geemap安装geemap依赖包conda install -c conda-forge geemap 安装mambaconda install …...

.netcore grpc一元方法详解
一、grpc服务端搭建 打开visual studio--》新建项目--》创建ASP.NET Core gRPC服务。 这里我是用的.NET 6.0做为底层框架,使用该框架支持grpc的功能更全面。令注使用nuget包Grpc.AspNetCore这里我使用的是2.40.0版本。 // 创建dollar.proto文件syntax "prot…...

自学网络安全(黑客)全网详细路线
前言 web渗透是网络安全大行业里入门板块,就像十年前的软件,前景非常被看好,薪资也很诱人。与软件测试和前端开发只需掌握一定的编程能力不同的是,渗透需要掌握的知识内容较多,花费的时间较长,渗透测试掌握…...

上半年210个数字化大单,花落谁家?
2023年,各地数字化采购项目有怎样的进展?最近,我们通过中国政府采购网、中国招投标公共服务平台、天眼查、企查查等渠道,梳理了2023年上半年政企数字化项目的中标情况,并从中看到今年数字化项目的市场特点。 01 金融千…...

Integer.bitCount()
先看一道算法题: 剑指 Offer 15. 二进制中1的个数 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 1 的个数(也被称为 汉明重量).)。 提示: …...

【Gitee的使用】Gitee的简单使用,查看/创建SSH公匙、创建版本库、拉取代码、提交代码
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 本篇文章简单介绍,如何在Gitee上面创建版本库、拉取…...

Java 跨平台多媒体处理样例
代码 import cn.hutool.core.exceptions.ExceptionUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.CharsetUtil; import lombok.extern.slf4j.Slf4j; import ws.schild.jave.Encoder; import ws.schild.jave.Multime…...

cmake基础(3)——安装
一、简介 install命令用于指定安装时的规则,由于安装命令比较复杂,这里做一部分内容的介绍,后续用到再继续完善。 1.命令简介 本文档基于3.20,目前有6种安装方式。 install(TARGETS <target>... [...]) install({FILES …...

LeetCode解法汇总1572. 矩阵对角线元素的和
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一个正…...

BFC(Block formatting context 块级格式化上下文)
1、开启了BFC能解决什么问题? 给父元素开启BFC,其子元素不会再产生 margin 塌陷问题。自己不会被其他浮动元素所覆盖。就算其子元素浮动,元素自身高度也不会塌陷。 2、如何开启? 根元素浮动元素绝对定位、固定定位的元素行内块…...

Leetcode-每日一题【剑指 Offer 14- II. 剪绳子 II】
题目 2、3、3的三段,此时得到的最大乘积是18。 答案需要取模 1e97(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入: 2输出: 1解释: 2 1 1, 1 1 1 示例 2: 输入: 10输出…...

bye 我的博客网站
Bye🙋🙋🙋,我的博客网站。在我的服务器上运行了9个月之久的博客网站要和大家Bye了。 背景 可能很多人不知道我的这个博客网站的存在,好吧,最后一次展示它了,博客网站地址在这里,它…...

Llama 2:开放基础和微调聊天模型
介绍 大型语言模型(llm)作为高能力的人工智能助手,在复杂的推理任务中表现出色,这些任务需要广泛领域的专家知识,包括编程和创意写作等专业领域。它们可以通过直观的聊天界面与人类进行交互,这在公众中得到了迅速而广泛的采用。 法学硕士的能力是显著的考虑到训练的表面上…...

JVM工作的总体机制概述
JDK、JRE、JVM关系回顾 JVM:Java Virtual Machine,翻译过来是Java虚拟机JRE:Java Runtime Environment,翻译过来是Java运行时环境 JREJVMJava程序运行时所需要的类库JDK:Java Development Kits,翻译过来是…...

jmeter工具测试和压测websocket协议【杭州多测师_王sir】
一、安装JDK配置好环境变量,安装好jmeter 二、下载WebSocketSampler发送请求用的,地址:https://bitbucket.org/pjtr/jmeter-websocket-samplers/downloads/?spma2c4g.11186623.2.15.363f211bH03KeI 下载解压后的jar包放到D:\JMeter\apache-j…...

国产漏洞扫描器Xray入门,详细教程
国产漏洞扫描器Xray入门,详细教程 1.Xray简介2.快速开始3.使用 xray 代理模式进行漏洞扫描4.使用 xray 基础爬虫模式进行漏洞扫描5.使用 xray 进行服务扫描1.Xray简介 xray 是一款功能强大的安全评估工具,由多名经验丰富的一线安全从业者呕心打造而成,主要特性有: 检测速度…...

LeetCode209. 长度最小的子数组
题目:LeetCode209. 长度最小的子数组 描述: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子…...

css冒号对齐
实现后的样式效果 实现方式 html: <el-col v-if"item.showInSingle ! false" :span"6" style"padding: 4px 0"><label>{{ item.label }}:</label><span v-if"singleData[item.prop] ! 0 &…...

那些年的golang开发经验记录
goland 问题CreateProcess error216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者 Cannot run program "......" (in directory "D:\project\go\awesomeProject\src\test"): CreateProcess error2…...

element中select下拉框如何实现宽度自适应
简单暴力: element 和 elementPlus 都可以直接在el-select上添加 style"width: 100%" 解决 <el-select style"width: 100%" v-model"cats" multiple filterable placeholder"请选择分类"> . . . </el-select&…...

springboot项目get请求下划线转驼峰@JsonProperty注解失效问题
问题:解决sprigboot项目get请求中有下划线的入参参数,如:first_name,希望在项目中将下划线格式转成firstName,用JsonProperty注解发现失效问题 1.核查:JsonProperty注解对应包是否正确 正确包:…...

架构训练营学习笔记:6-2 微服务基础选型
基础选型 微服务基础设施架构 优先级 其中,核心 就是服务注册、服务发现、服务路由。 模式1-嵌入SDK 模式2-反向代理式 模式3-网络代理式(Service Mesh) 模式对比 常见微服务框架选择 嵌入SDK-dubbo Spring Cloud 反向代理式 APISIX …...

opencv实战项目 实现手势跟踪并返回位置信息(封装调用)
OpenCV 是一个基于 Apache2.0 许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 需要提前准备opencv 和 mediapipe库 pip --default-timeout5000 install -i https://pypi.tuna.tsi…...